我找不到从依赖项服务中如何在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获得的上下文,这种方法是相同的。

android - 无法从Android上的Xamarin.Forms中的依赖项服务打开文件-LMLPHP



新编辑

注释行intent.SetDataAndType(path, mimeType);将导致以下弹出窗口。

android - 无法从Android上的Xamarin.Forms中的依赖项服务打开文件-LMLPHP

最佳答案

看来您使用了插件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

如果问题仍然存在,您可以创建一个包含问题的示例,以便我可以自己进行测试。

10-08 03:16