簡體   English   中英

Xamarin FileProvider無法在Android中打開文件

[英]Xamarin FileProvider can't open files in Android

在我的Xamarin Forms應用程序中,我創建了可以用Android應用程序打開的pdf。

使用裝有Android 7的設備,一切正常,現在我已經使用Android 8對其進行了測試,並且該文件無法打開。

我已經安裝了Xam.PluginMedia並保留所有默認設置:

在MainActivity中,我使用以下方法覆蓋了OnRequestPermissionsResult函數:

Plugin.Permissions.PermissionsImplementation.Current.OnRequestPermissionsResult(requestCode, permissions, grantResults);

file_paths.xaml是:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-files-path name="my_images" path="Pictures" />
    <external-files-path name="my_movies" path="Movies" />
</paths>

並且在AndroidManifest.xml中添加了:

<provider android:name="android.support.v4.content.FileProvider" 
    android:authorities="${applicationId}.fileprovider" 
    android:exported="false" 
    android:grantUriPermissions="true">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths"></meta-data>

打開預覽的代碼是這樣的:

public void OpenPreviewFile(string FilePath)
{

    Java.IO.File JavaFile = new Java.IO.File(FilePath);   

    Android.Net.Uri Path = FileProvider.GetUriForFile(global::Android.App.Application.Context, global::Android.App.Application.Context.PackageName + ".fileprovider", JavaFile);

    string Extension = global::Android.Webkit.MimeTypeMap.GetFileExtensionFromUrl(Path.ToString());
    string MimeType = global::Android.Webkit.MimeTypeMap.Singleton.GetMimeTypeFromExtension(Extension);
    Intent Intent = new Intent(Intent.ActionView);

    Intent.SetDataAndType(Path, MimeType);
    Intent.AddFlags(ActivityFlags.GrantReadUriPermission);
    Intent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);

    try
    {
        MainActivity.AppInstance.StartActivity(Intent.CreateChooser(Intent, TS.Translate("ANDROID_ScegliApp")));
    }
    catch (System.Exception)
    {
        Toast.MakeText(MainActivity.AppInstance, TS.Translate("ANDROID_ImpossibileAprireIlFIle"), ToastLength.Short).Show();
    }
}

生成的文件在以下路徑下: Android/data/MY_PACKAGE_ID/files/GeneratedReports

我已附上視頻以顯示實際行為。

視頻

是一個樣本

我發現了問題。

file_paths.xml ,節點的“路徑”值必須以“ /”開頭,

因此,使用以下節點: <files-path name="GeneratedReports" path="/GeneratedReports" />我的代碼有效。

另外我還需要刪除MyIntent.SetFlags(ActivityFlags.ClearWhenTaskReset | ActivityFlags.NewTask);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM