2016-10-13 12 views
1

私は、インテントで作成した後にpdfを開こうとしています。ファイルは存在し、読み取り可能ですがappsディレクトリ内に保存されます。E/PdfViewerActivity:fetchFile:file:java.io.FileNotFoundException:ファイルが存在しません

現在のファイルは、次のよう

 OutputStream out; 
    try { 
     //TODO: expose through a content provider 
     out = mContext.openFileOutput(outputFileName, Context.MODE_WORLD_READABLE); 
     document.writeTo(out); 
     out.close(); 

に保存され、ファイルは、それを開こうとするとアプリがGoogleドライブビューアで次のコード

final Intent viewIntent = new Intent(); 
    viewIntent.setAction(Intent.ACTION_VIEW); 
    viewIntent.setDataAndType(Uri.fromFile(file), "application/pdf"); 
    mActivity.startActivity(viewIntent); 

との意図に送信されますアンドロイドモニターに表示されます

E/PdfViewerActivity:fetchFile:file:java.io.FileNotFoundException:ファイルが存在しません

以前はこれが成功しましたが、私はこのコードに関連する変更はしていませんが、私はツールを更新しました。私はbuild.gradleのbuildToolsVersionをサポートライブラリ 'com.android.support:appcompat-v7:22.+'と 'com.android.support:design:22'と同様に変更してみました。 。+ '代わりにバージョン24.2.1

私は、意図を送信する直前にデバッガを使ってファイルを読み取り可能に設定しようとしましたが、動作しませんでした。

おかげ

+1

あるOS 6.xの上の許可が原因である可能性があり – sonnv1368

+0

ファイルパスが指し示されている場所にpdfが存在することを確認しましたか? –

+0

ありがとう、私はアクセス許可を見てみましょう。 ファイルとパスについて:ファイルが存在し、読み取り可能であり、合理的なサイズであることを確認しました。エミュレータでプロセスを実行し、デバイスモニタからファイルを取り出し、コンピュータ上で開くことができました。 – bitrock

答えて

1

私はAndroid 7 Behavior Changesドキュメントで始まる答えを見つけました。 MODE_WORLD_READABLEを設定するときに、ファイルを共有するドキュメントは、この

enter image description here

のいずれかを言及していないにもかかわらず、私は問題を解決するためにsharing filesのマニュアルに従ってもドキュメントのサンプルコードはより複雑だったもはや許容されません私が必要としたもの。私はまだファイルプロバイダをAndroidManifest.xmlに追加するだけでなく、fileprovider.xmlを作成する必要がありました。

結果のコードは、私が思うに、今

final Intent viewIntent = new Intent(); 
    viewIntent.setAction(Intent.ACTION_VIEW); 
    Uri fileUri = FileProvider.getUriForFile(mActivity, "my.authority.fileprovider", file); 
    viewIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
    viewIntent.setDataAndType(fileUri, "application/pdf"); 
関連する問題