【发布时间】:2019-11-12 04:21:05
【问题描述】:
我找不到如何从依赖服务打开 Android 中 Xamarin.Forms 上的文件的方法。
通过打开文件,我的意思是向用户显示本机 UI 以选择他想要打开文件的方式。
XPlat.Storage.IStorageFile storageFile = await blob.GetContentFileAsync();
File javaFile = new File(storageFile.Path);
Plugin.CurrentActivity.ICurrentActivity activity = Plugin.CurrentActivity.CrossCurrentActivity.Current;
Context context = activity.AppContext;
Uri path = FileProvider.GetUriForFile(context, context.PackageName, javaFile);
var intent = new Intent(Intent.ActionView);
intent.AddFlags(ActivityFlags.NewTask);
intent.AddFlags(ActivityFlags.GrantReadUriPermission);
intent.AddFlags(ActivityFlags.ClearTop);
string mimeType = MimeTypes.GetMimeType(System.IO.Path.GetExtension(blob.UniqueName));
intent.SetDataAndType(path, mimeType);
context.PackageManager.GetPackageInfo(context.PackageName, PackageInfoFlags.Activities);
context.StartActivity(intent);
调用方法时抛出异常StartActivity(intent)
Android.Content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=content://com.company.appname/root/data/data/com.company.appname/files/Blobs/file.pdf typ=application/pdf }
我还尝试使用不同的方法来获取应用程序上下文 -
var context = MonoAndroid.App.Application.Context;,但是好像是通过Plugin.CurrentActivity获取的上下文和这个方法是一样的。
新编辑
注释掉 intent.SetDataAndType(path, mimeType); 行会导致以下弹出窗口。
【问题讨论】:
-
只需使用任何普通的 .NET System.IO.File 方法
-
我需要向用户呈现对话框使用完成操作。 stackoverflow.com/questions/17165972/…
-
@LucasZhang-MSFT 遗憾的是,我没有。我更新了原来的问题。
-
你能分享一个包含问题的样本,以便我可以测试它。
-
原来问题不在活动/上下文中。如果我注释掉
intent.SetDataAndType(path, mimeType);行,它实际上会继续并显示带有三个选项的弹出窗口:i.imgur.com/NJOiIop.png
标签: android android-intent android-activity xamarin.forms