ファイルプロバイダを使用してPDFファイルを表示しようとしています。ただし、PDFリーダーを開くと、ファイルの内容は含まれません。ファイルは、ファイルフォルダ内のアプリケーションの内部ストレージに保存されます。FileProvider Xamarinにファイルが表示されない
マニフェスト:
<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.mycom.myapp.fileprovider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" />
</provider>
File_paths:
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="export" />
</paths>
pdfViewRenderer.cs:
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(libraryPath, fileName);
string application = "application/pdf";
Java.IO.File javaFile = new Java.IO.File(fileName);//externalPath
Android.Net.Uri androidURI = FileProvider.GetUriForFile(Forms.Context.ApplicationContext, "com.mycom.myapp.fileprovider", javaFile);
Intent intent = new Intent(Intent.ActionView);
intent.SetDataAndType(androidURI, Filetype);
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
intent.SetFlags(ActivityFlags.NoHistory);
intent.SetFlags(ActivityFlags.ClearWhenTaskReset);
Forms.Context.StartActivity(Intent.CreateChooser(intent, "Open PDF"));
これはよさそうだが、しかし、結果はPDFビューア内で、これはオープンになるの.tmpを生成しますか? – Simon
@Simonは、私が使用したすべてのPDFビューアでうまく動作しますが、 'GetTempPath'を使用して、あなたの選択したファイル名を追加することができます.. i.e.'var savePath = Path.Combine(Path.GetTempPath()、pdfAssetName ); ' – SushiHangover
私はちょうどそれと昨日働いた...そして、あなたの解決策は、しかし、私に同じ問題を与えてくれました。さらに見ると、権限に問題があることがわかりました。受信しているアプリが許可拒否を取得していました。 URIパーミッションを付与することでこれが解決され、私は元のコードを使用することができました。内部ストレージを使用するのは間違っていますか? – Simon