PDF помогите до жевать эту тему
PDF помогите до жевать эту тему
Доброго времени суток всем. Слезно прошу ПОМОГИТЕ!!! Пинки приветствуются" не смертельные" Я новичок бьюсь над проблемой отображения контента из 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;
Сори я не умею выкладывать код в свернутом виде.
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;
Сори я не умею выкладывать код в свернутом виде.
Последний раз редактировалось Anzik 29 янв 2015, 23:39, всего редактировалось 1 раз.
Re: PDF помогите до жевать эту тему
Неужели никто не поможет 
Re: PDF помогите до жевать эту тему
[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]
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 помогите до жевать эту тему
Правильно я понимаю вся соль в первой строке
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename);
Файл = новый файл полученный из директории далее получить абсолютный путь +" путь" + имя файла
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"file:///android_assets/dmv"+ dmv.pdf);
Если так то имя красным светится почему то
Пробовал разные вариации в итоге ошибка либо открывает другой экран "link"
Проверял на реальном устройстве
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename);
Файл = новый файл полученный из директории далее получить абсолютный путь +" путь" + имя файла
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"file:///android_assets/dmv"+ dmv.pdf);
Если так то имя красным светится почему то
Пробовал разные вариации в итоге ошибка либо открывает другой экран "link"
Проверял на реальном устройстве
Re: PDF помогите до жевать эту тему
Нашел в интернете вот такой вариант
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);
Пишу имя горит красным

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 помогите до жевать эту тему
В примере кода выше есть строка: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 помогите до жевать эту тему
В примере кода выше есть строка:
[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" и не надо указывать весь путь так ка другого просто не может быть так что ли?
[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 помогите до жевать эту тему
Что то совсем запутался
или ход мыслей все таки правильный.
Re: PDF помогите до жевать эту тему
Сделал так
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
}
ошибка ушла но все равно не работает
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 помогите до жевать эту тему
Не получится судя по всему прямо из assets передать файл в другое приложение. Можно попробовать в папку raw положить, от туда вроде бы можно получить Uri. Но более надежный вариант программно скопировать файл из assets на в память устройства и уже оттуда запускать, как и описал выше altwin.
И на устройстве должно быть приложение читающее pdf.
И на устройстве должно быть приложение читающее pdf.
Re: PDF помогите до жевать эту тему
Попробовал все и вся не работает видимо проблема такая же как здесь
viewtopic.php?f=51&t=2588&p=18096&hilit ... %83#p18096
Жаль тема контент провайдера в этой теме не раскрыта.
Комментарии пинки???
viewtopic.php?f=51&t=2588&p=18096&hilit ... %83#p18096
Жаль тема контент провайдера в этой теме не раскрыта.
Комментарии пинки???
Re: PDF помогите до жевать эту тему
"в память устройства и уже оттуда запускать, как и описал выше 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;
Кстати а где тут программное копирование на флешку?
Я делаю все в точности
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 помогите до жевать эту тему
Не понимаешь, что делаешь. Там нет программного копирования. Чтобы применить код altwin, нужно вначале файл скопировать. Примеры как это сделать можно найти: http://stackoverflow.com/questions/4447 ... -to-sdcard (правда тут копируется вся папка)
Re: PDF помогите до жевать эту тему
Создаёт папку копирует файл но он почему то пустой
Re: PDF помогите до жевать эту тему
Всем спасибо за советы
Все запутался
все удалил начинаю заново
Все запутался
Re: PDF помогите до жевать эту тему
применил такой вариант папку создаёт файл тоже но он 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 помогите до жевать эту тему
Re: PDF помогите до жевать эту тему
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]
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 помогите до жевать эту тему
За личку прости не удержался.
Этот вариант то же не сработал
Про папку и файл в курсе удаляю каждый раз.
В том то все и дело что все вроде нормально в манифесте все ок интент передаётся сторонние приложения запускаются папка создаётся файл тоже вроде все в норме но !!!!
Не пойму вроде процедура элементарная что не так.
В нете нашел кучу примеров но это все одно и тоже только у всех работает а у меня нет.
Этот вариант то же не сработал
Код: Выделить всё
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 помогите до жевать эту тему
Сейчас файл тоже не копируется?
Если копируется, то у вас ошибка еще вот тут:
[syntax=java]final String filename ="dmv.pdf";
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename); //<---тут файла нет, вы его не сюда копируете[/syntax]
у вас уже есть нужный файл ("File f") его и передавайте в intent (Uri.fromFile(f))
Если копируется, то у вас ошибка еще вот тут:
[syntax=java]final String filename ="dmv.pdf";
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+ filename); //<---тут файла нет, вы его не сюда копируете[/syntax]
у вас уже есть нужный файл ("File f") его и передавайте в intent (Uri.fromFile(f))