如果我有内容 URI 而不是路径,是不是可以在 Android 中使用 Xamarin.Essentials.Launcher 启动文件?
Posted
技术标签:
【中文标题】如果我有内容 URI 而不是路径,是不是可以在 Android 中使用 Xamarin.Essentials.Launcher 启动文件?【英文标题】:Is it possible in Android to launch a file using Xamarin.Essentials.Launcher if I have a content URI instead of a path?如果我有内容 URI 而不是路径,是否可以在 Android 中使用 Xamarin.Essentials.Launcher 启动文件? 【发布时间】:2021-05-30 07:27:21 【问题描述】:using Xamarin.Essentials;
namespace myNamespace
class myClass
public async void OpenFile(string path)
await Launcher.OpenAsync(new OpenFileRequest("File", new ReadOnlyFile(path)));
如果path
是一个真实的文件系统路径,它工作得很好,如果它是一个URI,它就不起作用,给出如下错误:
System.IO.DirectoryNotFoundException:'找不到路径“content://com.android.providers.downloads.documents/something”的一部分。'
(我正在使用 Xamarin.Plugin.FilePicker 获取 path
,因此它应该是一个真实文件,但有时 FilePicker 返回 URI 而不是路径。例如,如果我选择来自相机的图像它返回一个路径,如果我从下载中选择一个文件,它返回一个 URI)。
【问题讨论】:
你想用这个代码打开互联网文件的url吗? 【参考方案1】:我自己找到了解决方案。如果“路径”是内容 URI,则可以使用 ActionView 意图启动文件。
namespace myNamespace
class myClass
public void OpenFile(string path)
var uri = Android.Net.Uri.Parse(path);
var intent = new Intent(Intent.ActionView, uri);
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
if (intent.ResolveActivity(Activity.PackageManager) != null)
StartActivity(intent);
如果是路径,您的应用必须是FileProvider
才能使用此方法,如下所述:android.os.FileUriExposedException: file:///storage/emulated/0/test.txt exposed beyond app through Intent.getData()
在这种情况下,请使用 Xamarin.Essentials.Launcher
,因为它会将 FileProvider
功能添加到您的应用中。
【讨论】:
以上是关于如果我有内容 URI 而不是路径,是不是可以在 Android 中使用 Xamarin.Essentials.Launcher 启动文件?的主要内容,如果未能解决你的问题,请参考以下文章
在 React 中使用数据 URI 而不是小于 10kb 的图像的路径的原因是啥?