Android アプリケーション内のファイル システムに保存した PDF を開く際に問題があります。
サーバーからバイト配列をシリアル化する残りの呼び出しがあり、このバイト配列を pdf ファイルとして保存します。この部分は正常に動作し、pdf が保存されているディレクトリに移動して、すべて問題なく開くことができます。
ただし、電話GS4(POLARIS Office View 5)またはAdobe Readerのデフォルトのpdfビューアを介してアプリケーション内からpdfを開こうとすると、両方のアプリケーションでファイルを開くことができません。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 を宣言すると READ パーミッションも得られることはわかっていますが、4.2 でこれが追加されたので、試してみようと思いましたが、まだ喜びはありません。
私が「考えた」もう1つのことは、「getExternalFilesDir」を呼び出して、これらのファイルへのサードパーティアプリへの読み取りアクセスを許可することでした??!!
以下のコードは、pdfを読み取ろうとしている方法を示しています
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);
誰かが私を正しい方向に向けることができれば、私は最も感謝しています
ありがとう