Страница 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
Неужели никто не поможет :shock:

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"

Проверял на реальном устройстве :cry:

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);
Пишу имя горит красным
:oops:

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);
Пишу имя горит красным
:oops:
В примере кода выше есть строка:
[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
Что то совсем запутался :cry: или ход мыслей все таки правильный.

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
:( :o :shock: :cry: два дня гипнотизирую комп в надежде что кто то ответит мне хоть, намекнёт что не так с кодом плиз!!! хелп!!!

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))