Android.OS.FileUriExposed尝试在 MAUI Android 应用中打开文件时出现异常

Android.OS.FileUriExposedException when trying to open a file in MAUI Android app

提问人:Dragon Slayer 提问时间:10/20/2023 更新时间:10/20/2023 访问量:49

问:

我正在开发一个 MAUI Android 应用程序,我需要在其中打开位于 Downloads 目录中的文件。我已经编写了代码来构造文件路径,并按照此处的 Microsoft 文档使用 Launcher.Default.OpenAsync 方法打开它。

  #if ANDROID
    string dir = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;
  #else
    string dir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads");
  #endif
    string folderName = rework.ServiceOrder.ServiceOrderNo;
    string folderPath = Path.Combine(dir, folderName);
  // Created directory and added files I can see the folder in the Files
    var uri = new Uri(folderPath).AbsoluteUri;
    await Launcher.Default.OpenAsync(uri);

但是,我收到以下异常

Android.OS.FileUriExposedException: file:///storage/emulated/0/Download/TN1910013 在应用之外公开 通过 Intent.getData()

我已经尝试在AndroidManifest.xml文件中添加必要的意图过滤器,如文档中所述。这是我的清单文件的相关部分:

<activity android:name="maui_app" android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="file" android:mimeType="*/*"/>
        <data android:scheme="content" android:mimeType="*/*"/>
    </intent-filter>
</activity>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

此代码在 Windows 上完美运行,并使用正确的目录打开文件资源管理器。但是,它不适用于我的 Android 本地设备。如何解决此问题并在我的 MAUI Android 应用程序中成功打开文件?

谢谢你的帮助!

C# 文件 Android-intent 毛伊岛

评论

1赞 blackapps 10/20/2023
从Android 7 / N开始,您就无法使用文件uri。谷歌一下,有很多答案。
0赞 Dragon Slayer 10/21/2023
尝试过这个 await Launcher.Default.OpenAsync(folderPath);出现此异常:未找到处理意图的活动 { act=android.intent.action.VIEW dat=/storage/emulated/0/Download/TN1910013 flg=0x14000000 }
0赞 Dragon Slayer 10/21/2023
我能够从下面的代码从目录中打开一个文件,但我想打开目录 //string popoverTitle =folderName;await Launcher.Default.OpenAsync(new OpenFileRequest(popoverTitle, new ReadOnlyFile(filepath)));
1赞 blackapps 10/21/2023
你显然没有谷歌,否则你使用了FileProvider。

答: 暂无答案