Android 4,5,6で正しく動作しているアプリがあります。このアプリケーションはサーバー内のリモートファイルを一覧表示し、サーバーからダウンロードできますファイル)。ファイルをクリックすると、それは "Android Downloads folder"にダウンロードされ、終了するとデフォルトのPDFリーダーで開きます。Android 7 - PDFを表示できません(pdf_nameは無効な形式です)
問題は、Android 7の同じコードが次のエラー(「PDFを表示できません(pdf_nameは無効な形式です)」に失敗していることです)。
ので、それは面白いです:私はダウンロードフォルダにアクセスし、ダウンロードしたファイルをクリックした場合、それが適切に開く
- 。
- ダウンロードが完了すると、通知が表示されます。クリックすると通知が正しく開きます。
この問題は、同じAppがダウンロード後に自動的にファイルを開こうとする場合にのみ発生します。私は、ダウンロードするにはどうすればよい
:一度
fileName="file.pdf";
request = new DownloadManager.Request(Uri.parse(Constants.GetURL()));
request.setMimeType(mime)
.setTitle(fileName).setVisibleInDownloadsUi(true)
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
.setDescription(mContext.getString(R.string.app_name))
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
enqueue = dm.enqueue(request);
がダウンロードされます:
Uri path = Uri.parse(c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)));
//path contains the route where file was downloaded. Something like: file:///storage/emulated/0/Download/file.pdf
Intent pdfOpenintent = IntentHelper.getViewPDFIntent(path);
mContext.startActivity(pdfOpenintent);
私はそれを開く方法:FileProviderについて
public static Intent getViewPDFIntent(Uri path){
Intent i = new Intent(Intent.ACTION_VIEW);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
pdfOpenintent.setDataAndType(path, "application/pdf");
return i;
}
を: 私が使用して実装されていますFileProviderと問題はtです彼は同じです。これはアクセス許可に関連していないため、ダウンロードフォルダはパブリックフォルダであり、SecurityException発生またはアクセス許可に関連するその他の例外はありません。
これは、ドキュメントを送信するためにGmailと同じ共有が行われるため、PDFアプリケーションとは関係ありません。
範囲外の振舞い:ステップごとにアプリケーションのステップをデバッグすると、完全に動作します。正常に実行すると失敗します。私が睡眠や5秒の遅れを入れた場合、動作しません。したがって、デバッグのみが機能します。
Android 7について:Android 7(https://developer.android.com/about/versions/nougat/android-7.0-changes.html)の正式な変更を読んで、それはうまくいくはずだが、これ以上はお勧めできません。それ以外の場合、動作しません。
新しいアイデアはありますか?
どのPDFビューアを使用しますか?あなたはそれを 'path 'の値として与えているのですか? 'getViewPDFIntent()'とは何ですか? – CommonsWare
こんにちは@CommonsWare私はあなたの質問に答えるコードを変更しました。どうも。 – Christian
あなたが 'targetSdkVersion'を25以上に上げると、' file'' Uri'はAndroid 7.0以降では動作しません。既に 'FileProvider'への移動を開始したいかもしれません。そして、以前に尋ねたように、どのPDFビューアを使用しようとしていますか? – CommonsWare