android - 无法在 Android 上的 Xamarin.Forms 中从依赖项服务打开文件
问题描述
我找不到如何从依赖服务打开 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 }
我也尝试使用不同的方法来获取 Application context -
var context = MonoAndroid.App.Application.Context;
,但似乎通过Plugin.CurrentActivity
这种方法获得的上下文是相同的。
新编辑
注释掉该行intent.SetDataAndType(path, mimeType);
会导致以下弹出窗口。
解决方案
您似乎使用了插件CurrentActivityPlugin。确保已将其安装在 MainActivity
protected override void OnCreate(Bundle savedInstanceState)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(savedInstanceState);
CrossCurrentActivity.Current.Init(this, savedInstanceState);
Xamarin.Essentials.Platform.Init(this, savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
Android.Content.ActivityNotFoundException
这个问题似乎应用程序找不到当前的活动,所以你也可以使用
Android.App.Application.Context
如果问题仍然出现,您可以创建一个包含问题的示例,以便我可以在我这边进行测试。
推荐阅读
- composer-php - 作曲家需要阅读所有包的所有版本,并且花费太多时间
- angular - 第一次加载时未从 url 查询参数初始化 Angular 7 变量
- python - 如何将某些列截断为 X 个字符?
- java - 如何处理高分辨率图像?
- linux - grep 只是具有最新时间戳的 uniq 数据
- python - Python:在不使用正则表达式的情况下查找字符串中所有出现的子字符串
- postgresql - 应用程序无法启动 Qt 平台插件 Windows
- python - 使用来自 1 个文件的键和来自另一个文件的值生成 JSON 有效负载以发布到 API
- mysql - 在另一个子查询中使用 From(子查询)表
- python - 在类的字段上对 dict() 进行排序