私のアプリにFileProvider
がありますが、それは動作しているように見せかけますが、開いているファイルは空白です。私は、ファイルが指定されたディレクトリのデバイス上に既に存在し、空ではないことを確認しましたが、私のアプリの中からファイルを開くときに失敗します。クラッシュはなく、エラーメッセージもありません。誰もこれを見たことがありますか?FileProviderがPDFを開いていますが、空白です。どうして?
FileProvider:
<provider android:name="android.support.v4.content.FileProvider" android:authorities="com.my.redacted.provider" android:exported="false" android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" />
</provider>
provider_paths.xml
<?xml version="1.0" encoding="utf-8" ?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_storage" path="." />
</paths>
コード:
var path = "/storage/emulated/0/MyApp/User/attachments/folder/attachment.pdf"
var file = new Java.IO.File(path);
var mime = MimeTypeMap.Singleton;
var ext = MimeTypeMap.GetFileExtensionFromUrl(path).ToLower();
var type = mime.GetMimeTypeFromExtension(ext);
var intent = new Intent();
intent.SetAction(Intent.ActionView);
var name = activity.PackageName + ".provider";
var uri = FileProvider.GetUriForFile(activity.ApplicationContext, name, file);
intent.SetDataAndType(uri, type);
intent.SetFlags(ActivityFlags.GrantReadUriPermission);
intent.SetFlags(ActivityFlags.GrantWriteUriPermission);
var packageManager = activity.PackageManager;
if (intent.ResolveActivity(packageManager) != null)
activity.RunOnUiThread(() => activity.StartActivity(intent));
else
{
var message = "No viewer for attachments: " + type;
activity.RunOnUiThread(() =>
Snackbar.Make(view, message, Snackbar.LengthLong).Show()
);
}
私は、URIがされて終わるか見てデバッグしている、それは右になります。
u ri.Path:
"/external_storage/MyApp/User/attachments/folder/attachment.pdf"
uri.ToString():
"content://com.my.redacted.provider/external_storage/MyApp/User/attachments/folder/attachment.pdf"
は、だから私は本当に何が起こっているかわかりません。
注:私は/ storage/emulated/0/MY_STUFFに自分のドキュメントを持っていますが、これが<external-path>
が返ってきたものであることを確認しました。
'新しいjava.io.Fileに(パス);'。パスの値を表示してください。 – greenapps
私はその時点でパスが私の質問に追加されました。パスには、その外部ディレクトリが含まれています。 –
uri.getPath()とuri.toString()の値も教えてください。 – greenapps