我找不到从依赖项服务中如何在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);
将导致以下弹出窗口。最佳答案
看来您使用了插件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
这个问题似乎是应用程式找不到目前的Activity,因此您也可以使用
Android.App.Application.Context
如果问题仍然存在,您可以创建一个包含问题的示例,以便我可以自己进行测试。