Страница 1 из 2
PDF помогите до жевать эту тему
Добавлено: 20 янв 2015, 22:29
Anzik
Доброго времени суток всем. Слезно прошу ПОМОГИТЕ!!! Пинки приветствуются" не смертельные" Я новичок бьюсь над проблемой отображения контента из PDF файла в андроид приложении среда разработки андройд студия API 15. Есть приложение и готовый pdf не могу их подружить. Поиск по форуму дал направление. Передача intent другому приложению.Приведённый ниже код по нажатию кнопки ПДД запускает Adobe reader и тут же выдаёт ошибку НЕ ДОПУСТИМЫЙ ПУТЬ К ДОКУМЕНТУ но само приложение не вылетает что не так подскажите
public void OnClick(View view) {
switch (view.getId()) {
case R.id.visa:
Intent intent = new Intent(this, VisaActivity.class);
startActivity(intent);
break;
case R.id.point:
Intent intent1 = new Intent(this, PointActivity.class);
startActivity(intent1);
break;
case R.id.pdd:
Intent intent2 = new Intent(Intent.ACTION_VIEW);
intent2.setData(Uri.parse("file:///android_asset/dmv.pdf")); <<------ не допустимый путь
startActivity(intent2);
break;
case R.id.link:
Intent intent3 = new Intent(this, LinkActivity.class);
startActivity(intent3);
break;
Сори я не умею выкладывать код в свернутом виде.
Re: PDF помогите до жевать эту тему
Добавлено: 28 янв 2015, 11:06
Anzik
Неужели никто не поможет

Re: PDF помогите до жевать эту тему
Добавлено: 28 янв 2015, 12:56
altwin
[syntax=java5]File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename);
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(file),"application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Intent intent = Intent.createChooser(target, "Open File");
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
// Instruct the user to install a PDF reader here, or something
} [/syntax]
Re: PDF помогите до жевать эту тему
Добавлено: 28 янв 2015, 20:57
Anzik
Правильно я понимаю вся соль в первой строке
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename);
Файл = новый файл полученный из директории далее получить абсолютный путь +" путь" + имя файла
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"file:///android_assets/dmv"+
dmv.pdf);
Если так то имя красным светится почему то
Пробовал разные вариации в итоге ошибка либо открывает другой экран "link"
Проверял на реальном устройстве

Re: PDF помогите до жевать эту тему
Добавлено: 28 янв 2015, 21:37
Anzik
Нашел в интернете вот такой вариант
case R.id.pdd:
Uri path = Uri.fromFile(
file);
Intent intent2 = new Intent(Intent.ACTION_VIEW);
intent2.setDataAndType(path, "application/pdf");
intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent2);
Пишу имя горит красным

Re: PDF помогите до жевать эту тему
Добавлено: 29 янв 2015, 14:06
altwin
Anzik писал(а):Нашел в интернете вот такой вариант
case R.id.pdd:
Uri path = Uri.fromFile(
file);
Intent intent2 = new Intent(Intent.ACTION_VIEW);
intent2.setDataAndType(path, "application/pdf");
intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent2);
Пишу имя горит красным

В примере кода выше есть строка:
[syntax=java5]File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename);[/syntax]
это тот самый файл. Если красный - значит ошибка, а если ошибка, то какая? А почему такая ошибка? а где файл?
Re: PDF помогите до жевать эту тему
Добавлено: 29 янв 2015, 19:08
Anzik
В примере кода выше есть строка:
[syntax=java5]File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename);[/syntax]
это тот самый файл. Если красный - значит ошибка, а если ошибка, то какая? А почему такая ошибка? а где файл?[/quote]
а если ошибка, то какая?
Ошибка такая "Ошибка: (59, 103) Ошибка: не удается найти переменную имя символа"
А почему такая ошибка?
По идее filename нужно чуть выше описать что это. верно???
а где файл?
Файл в папке assets его зовут dmv.pdf в developer.android.com прочитал "инглишь на нуле" что
общественного Строка getAbsolutePath ()
Возвращает абсолютный путь этого файла. Абсолютный путь путь, который начинается в корне файловой системы. На Android, есть только один корень: / .
Общее использование для абсолютных путей является при прохождении пути к процессу в качестве аргументов командной строки, чтобы убрать требование подразумевается при относительных путей, что ребенок должен иметь ту же рабочую директорию в качестве его родителя.
Выходит что файл лежит в "/dmv.pdf" и не надо указывать весь путь так ка другого просто не может быть так что ли?
Re: PDF помогите до жевать эту тему
Добавлено: 29 янв 2015, 21:17
Anzik
Что то совсем запутался

или ход мыслей все таки правильный.
Re: PDF помогите до жевать эту тему
Добавлено: 29 янв 2015, 23:18
Anzik
Сделал так
case R.id.pdd:
final String filename = "dmv.pdf"; <<<-------------
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+filename);
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(file), "application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Intent intent2 = Intent.createChooser(target, "Open File");
try {
startActivity(intent2);
} catch (ActivityNotFoundException e) {
// Instruct the user to install a PDF reader here, or something
}
ошибка ушла но все равно не работает
Re: PDF помогите до жевать эту тему
Добавлено: 30 янв 2015, 07:31
klblk
Не получится судя по всему прямо из assets передать файл в другое приложение. Можно попробовать в папку raw положить, от туда вроде бы можно получить Uri. Но более надежный вариант программно скопировать файл из assets на в память устройства и уже оттуда запускать, как и описал выше altwin.
И на устройстве должно быть приложение читающее pdf.
Re: PDF помогите до жевать эту тему
Добавлено: 30 янв 2015, 12:53
Anzik
Попробовал все и вся не работает видимо проблема такая же как здесь
viewtopic.php?f=51&t=2588&p=18096&hilit ... %83#p18096
Жаль тема контент провайдера в этой теме не раскрыта.
Комментарии пинки???
Re: PDF помогите до жевать эту тему
Добавлено: 30 янв 2015, 13:04
Anzik
"в память устройства и уже оттуда запускать, как и описал выше altwin." что altwin описал?
Я делаю все в точности
case R.id.pdd:
final String filename = "dmv.pdf";
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+filename);
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(file), "application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Intent intent2 = Intent.createChooser(target, "Open File");
try {
startActivity(intent2);
} catch (ActivityNotFoundException e) {
// Instruct the user to install a PDF reader here, or something
}
break;
Кстати а где тут программное копирование на флешку?
Re: PDF помогите до жевать эту тему
Добавлено: 30 янв 2015, 14:30
klblk
Не понимаешь, что делаешь. Там нет программного копирования. Чтобы применить код altwin, нужно вначале файл скопировать. Примеры как это сделать можно найти:
http://stackoverflow.com/questions/4447 ... -to-sdcard (правда тут копируется вся папка)
Re: PDF помогите до жевать эту тему
Добавлено: 30 янв 2015, 19:42
Anzik
Создаёт папку копирует файл но он почему то пустой
Re: PDF помогите до жевать эту тему
Добавлено: 30 янв 2015, 22:45
Anzik
Всем спасибо за советы
Все запутался

все удалил начинаю заново
Re: PDF помогите до жевать эту тему
Добавлено: 01 фев 2015, 09:56
Anzik
применил такой вариант папку создаёт файл тоже но он 0кб

а в оригинале примера пдфка и копируется и читается все работает на ура.
Что не так с кодом подскажите пожалуйста
Код: Выделить всё
case R.id.pdd:
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath() + "/Dy");
dir.mkdirs();
File f = new File(dir, "dmv.pdf");
if (!f.exists())
try {
InputStream is = getAssets().open("dmv.pdf");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
FileOutputStream fos = new FileOutputStream(f);
fos.write(buffer);
fos.close();
}
catch (Exception e) {
throw new RuntimeException(e);
}
final String filename ="dmv";
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename);
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(file), "application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Intent intent2 = Intent.createChooser(target, "Open File");
try {
startActivity(intent2);
} catch (ActivityNotFoundException e) {
// Instruct the user to install a PDF reader here, or something
}
break;
Re: PDF помогите до жевать эту тему
Добавлено: 03 фев 2015, 12:03
Anzik
Re: PDF помогите до жевать эту тему
Добавлено: 04 фев 2015, 06:36
klblk
0) В личку писать не нужно, это только раздражает, если я знаю ответ я отвечу тут, если нет то не отвечу нигде.
1) Попробуйте удалить файл с sd карты и снова запустить программу (т.к. если файл существует, пусть он хоть 0 байт условие if (!f.exists()) не сработает)
2) Попробуйте копировать файл так:
[syntax=java] InputStream in = getAssets().open("dmv.pdf");
OutputStream out = new FileOutputStream(f);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();[/syntax]
Re: PDF помогите до жевать эту тему
Добавлено: 04 фев 2015, 08:09
Anzik
За личку прости не удержался.
Этот вариант то же не сработал
Код: Выделить всё
case R.id.pdd:
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File(sdCard.getAbsolutePath() + "/Dy");
dir.mkdirs();
File f = new File(dir, "dmv.pdf");
if (!f.exists())
try {
InputStream in = getAssets().open("dmv.pdf");
OutputStream out = new FileOutputStream(f);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
catch (Exception e) {
throw new RuntimeException(e);
}
final String filename ="dmv.pdf";
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename);
Intent target = new Intent(Intent.ACTION_VIEW);
target.setDataAndType(Uri.fromFile(file), "application/pdf");
target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
Intent intent2 = Intent.createChooser(target, "Open File");
try {
startActivity(intent2);
} catch (ActivityNotFoundException e) {
// Instruct the user to install a PDF reader here, or something
}
break;
Про папку и файл в курсе удаляю каждый раз.
В том то все и дело что все вроде нормально в манифесте все ок интент передаётся сторонние приложения запускаются папка создаётся файл тоже вроде все в норме но !!!!
Не пойму вроде процедура элементарная что не так.
В нете нашел кучу примеров но это все одно и тоже только у всех работает а у меня нет.
Re: PDF помогите до жевать эту тему
Добавлено: 04 фев 2015, 08:47
klblk
Сейчас файл тоже не копируется?
Если копируется, то у вас ошибка еще вот тут:
[syntax=java]final String filename ="dmv.pdf";
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename); //<---тут файла нет, вы его не сюда копируете[/syntax]
у вас уже есть нужный файл ("File f") его и передавайте в intent (Uri.fromFile(f))