私がしたい私のXamarin.Forms Androidアプリのサードパーティ製アプリケーションの内部ストレージからファイルを編集します。たとえば、PDFファイルのフォーム要素を記入するか、 docxファイル。Xamarin.Forms Android FileProvider:GrantWriteUriPermissionが常に動作しない
私の実装では、ファイルは外部アプリケーションで正しく開かれますが、特定のアプリケーションでは読み取り専用が開きます。 Adobe AcrobatとMicrosoft Wordはファイルを読み取り専用で開きますが、Google Docsのような他のアプリケーションはファイルに書き戻すことができます。 (私は有効なOffice365サブスクリプションでMicrosoft Wordを使用しています)。
のAndroidManifest.xmlで私のFileProvider:私は活動を開始し、外部を起動するには、コンテンツのURIを渡していますXamarin.Forms DependencyService経由
<paths>
<files-path name="files" path="."/>
</paths>
:
<provider android:name="android.support.v4.content.FileProvider"
android:authorities="xamarintestapp.xamarintestapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>
filepaths.xmlアプリ:
public void OpenFile(string fileName)
{
string auth = "xamarintestapp.xamarintestapp.fileprovider";
string mimeType = Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(fileName.ToLower()));
if (mimeType == null)
mimeType = "*/*";
var file = new Java.IO.File(Path.Combine(Forms.Context.FilesDir.Path, fileName));
Android.Net.Uri uri = FileProvider.GetUriForFile(Forms.Context, auth, file);
Intent intent = new Intent(Intent.ActionView);
intent.SetDataAndType(uri, mimeType);
intent.AddFlags(ActivityFlags.GrantReadUriPermission | ActivityFlags.GrantWriteUriPermission);
intent.AddFlags(ActivityFlags.NewTask | ActivityFlags.NoHistory);
// Trying to allow writing to the external app ...
var resInfoList = Forms.Context.PackageManager.QueryIntentActivities(intent, PackageInfoFlags.MatchDefaultOnly);
foreach (var resolveInfo in resInfoList)
{
var packageName = resolveInfo.ActivityInfo.PackageName;
Forms.Context.GrantUriPermission(packageName, uri, ActivityFlags.GrantWriteUriPermission | ActivityFlags.GrantPrefixUriPermission | ActivityFlags.GrantReadUriPermission);
}
Forms.Context.StartActivity(intent);
}
私は何か間違っているのですか?これは簡単ではありませんか?
1つのアプリが期待どおりに動作していない場合、2つのアプリが非難するのはなぜですか?他の拡張機能や他のアプリを試してみてください。ファイルプロバイダなしで2つのアプリを試してみてください。 – greenapps
私はFileProviderなしで両方のアプリを試しました(ファイルを外部ストレージにコピーしてそこから開く - ファイルは書き込み可能になっています)。 ContentProviderとDocumentProviderを試しましたが、同じ結果で、いくつかのアプリケーションが読み込み専用のファイルを開いているのに対して、他の人は読んでいないのですが、私は興味があります。 – stefffdev
'Forms.Context.StartActivity Xamarin.Androidではなく、Xamarin.Formsソリューションを実際に開発しています。そうですか?あなたの問題は、Androidプラットフォームではなく、UWPのような他のプラットフォームへの書き込み許可についてですか? –