2013-05-08 4 views
0

У меня возникла проблема с открытием pdf-файла, который я сохранил в файловой системе в приложении для Android.Невозможно открыть pdf в приложении android

У меня есть вызов для сериализации массива байтов с сервера, затем я сохраняю этот массив байтов в качестве файла pdf. Эта часть работает нормально, и я могу перейти к директории, в которой был сохранен pdf-файл, и открыть все это o.k.

Однако при попытке открыть pdf-файл из моего приложения либо через программу просмотра PDF по умолчанию на моем телефоне GS4 (POLARIS Office View 5) или Adobe Reader оба приложения не могут открыть файл. POLARIS возвращает тост «Этот документ не может быть открыт» Adobe запускается, но затем взлетает Недопустимый путь к документу.

Мой код для сохранения моих файлов.

private String createFile(AttachmentDTO dto) { 
    String fileExtention = getMimeType(dto);  
    File file = new File(context.getExternalFilesDir(Constants.BASE_EXTERNAL_DIRECTORY_ATTACHMENTS), dto.getId() + fileExtention); 
    FileOutputStream fos; 

    try { 
     Files.write(dto.getAttachment(), file); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    return file.getPath(); 
} 

Полный путь для моего файла

/storage/emulated/0/Android/data/com.rsd.childcare.mobile.client/files/attachments/2.pdf

Теперь я полагаю, что ни одно приложение не может открыть PDF из-за разрешений. Однако у меня есть следующий в моем манифесте

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

Я знаю, что при объявлении WRITE_EXTERNAL_STORAGE вы получите разрешения на чтение, а также, но в 4.2 они добавили это так, я думал, что попробовать, но до сих пор нет радости.

Другая вещь, которую я «задумал», вызвал «getExternalFilesDir», это дало доступ для чтения к сторонним приложениям в эти файлы ?? !!

Приведенные ниже код показывает, как я пытаюсь прочитать Ф

String filePath = Attachment.findAttachmentPath(Integer.parseInt((String) view.getContentDescription())); 
     File file = new File(Environment.getExternalStorageDirectory() + filePath); 
     Uri path = Uri.fromFile(file); 
     Intent intent = new Intent(Intent.ACTION_VIEW); 
     intent.setDataAndType(path, "application/pdf"); 
     intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     context.startActivity(intent); 

Если кто-то может мне точку в правильном направлении, я был бы очень благодарен

Благодаря

+0

Никогда не используйте конкатенацию для создания объекта «Файл». Используйте конструктор 'File'. Я также избавился бы от FLAG_ACTIVITY_CLEAR_TOP. Кроме того, имейте в виду, что приложение * other * нуждается в разрешениях, хотя соответствующие приложения должны уже иметь соответствующие разрешения. Помимо этого, установите диспетчер файлов и попробуйте открыть PDF из него - если это не удается, я предполагаю, что сам файл как-то поврежден. – CommonsWare

+0

спасибо за ваш комментарий, удалили конкатенацию. и удален FLAG_ACTIVITY_CLEAR_TOP. Я могу добраться до файла через диспетчер файлов и открыть его с помощью любого PDF-просмотра всех o.k. Это то, что flummoxing – ngatirauks

ответ

0

Оказывается что у вас есть немного дублирования кода для определения пути - ваш код для записи, похоже, использует другой код для определения пути, чем ваш код для построения Uri для Intent. Вы уверены, что они совпадают?

getExternalFilesDir(Constants.BASE_EXTERNAL_DIRECTORY_ATTACHMENTS) предназначен для создания файла, в то время как getExternalStorageDirectory() используется для Uri. Возможно, вы захотите зайти в некоторые операторы Log или контрольные точки, чтобы убедиться, что все выстроилось так, как ожидалось. Еще лучше, вам может понадобиться немного объединить эту логику, поэтому вы уверены, что используете одни и те же значения в обоих местах.

+0

прямо вам, мои пути были неправильными, чтобы получить привязанность, бит ошибки новобранец, но кодирование в 2 часа ночи иногда случается !!!Спасибо за руководство, все работает хорошо сейчас – ngatirauks

Смежные вопросы