Ошибка при чтении PDF с использованием MODE_WORLD_READABLE? - PullRequest
3 голосов
/ 23 февраля 2012

Я создал приложение, которое загружает PDF-файл с сервера и сохраняет его в

/data/data/<package_name>files

используя этот код:

FileOutputStream fos = openFileOutput(pdfFileName, Context.MODE_WORLD_READABLE);
fos.write(pdfAsBytes);
fos.close();

Но при чтении этого файла из приложения чтения PDF, которое у меня уже есть на устройстве, иногда отображается черный экран, а иногда отображается файл с раздражающими шрифтами. Код, который я использую:

File file = new File("/data/data/<package_Name>/files/pdffile");
Uri path = Uri.fromFile(file);
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try
{
    startActivity(pdfIntent);
}
catch(Exception e)
{
    Log.e("Activity Not Found Exception",e.toString());
}

Я пробовал один и тот же код с теми же файлами по другому пути (в SDCard), они работают нормально. Пожалуйста, помогите мне и скажите, что должно было пойти не так.

Каким должен быть возможный способ исправить это?

Ответы [ 2 ]

0 голосов
/ 24 марта 2013

Есть только 2 способа достичь желаемого:


1) Использование SDCARD

Вы сохраняете скачанное pdf где-то SDCARD .Примерно так:

Вместо создания файла:

File pdfFile = new File(Environment.getExternalStorageDirectory(), "pdffile");
FileOutputStream fos = new FileOutputStream(pdfFile);
fos.write(pdfAsBytes);
fos.close();
...

И вы используете pdfFile при создании намерения.


2) Использование пользовательских ContentProvider

Второй метод можно использовать, если вы все еще не хотите использовать хранилище SDCARD.Вы можете использовать CacheDir вашего приложения (вы скачаете файл там).Это включает в себя создание собственного ContentProvider, и после этого вы сможете передать соответствующий URI в приложение pdfreader.

Подробная информация о том, как сделать все это, здесь .


Нет других известных способов открыть какой-либо загруженный файл в стороннем приложении в Android.

0 голосов
/ 13 апреля 2012

Вы должны использовать метод android.content.Context.getFilesDir () .

Возвращает абсолютный путь к каталогу в файловой системе, где хранятся файлы, созданные с openFileOutput (String, int).

У меня работает этот код:

File file = new File(this.getFilesDir(), pdfFileName);
Uri path = Uri.fromFile(file);
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
     startActivity(pdfIntent);
} catch(ActivityNotFoundException e) {
     Log.e("Activity Not Found Exception",e.toString());
}
...