代码之家  ›  专栏  ›  技术社区  ›  Christian

在xamarin.android中获取文件的内容uri的最佳实践是什么?

  •  1
  • Christian  · 技术社区  · 5 年前

    我已通过以下方式在清单中注册了文件提供程序:

    <provider android:name="android.support.v4.content.FileProvider"
              android:authorities="${applicationId}.provider"
              android:exported="false" android:grantUriPermissions="true">
      <meta-data android:name="android.support.FILE_PROVIDER_PATHS"
                 android:resource="@xml/provider_paths" />
    </provider>
    

    现在,我想获取该文件的uri以传递到另一个应用程序以打开该文件。我试过:

    Intent viewIntent = new Intent(Intent.ActionView);
    Java.IO.File document = new Java.IO.File(filePath);
    Android.Net.Uri contentUri = FileProvider.GetUriForFile(
        _context, Android.Support.FILE_PROVIDER_PATHS, document);
    
    viewIntent.SetDataAndType(contentUri, GetMimeType(document));
    viewIntent.SetFlags(ActivityFlags.NewTask);
    viewIntent.AddFlags(ActivityFlags.GrantReadUriPermission);
    Intent chooser = Intent.CreateChooser(viewIntent,
        "Which program shall open the file?");
    chooser.SetFlags(ActivityFlags.NewTask);
    chooser.AddFlags(ActivityFlags.GrantReadUriPermission);
    
    _context.StartActivity(chooser);
    

    不幸的是,我似乎无法应对 Android.Support.FILE_PROVIDER_PATHS 这种方式。怎样才能让我的uri尽可能干净?

    2 回复  |  直到 5 年前
        1
  •  0
  •   Christian    5 年前

    _context.PackageName + ".provider" 做这个工作( _context 是一个 Android.Content.Context ):

    Intent viewIntent = new Intent(Intent.ActionView);
    Java.IO.File document = new Java.IO.File(filePath);
    Android.Net.Uri contentUri = FileProvider.GetUriForFile(
        _context, Android.Support.FILE_PROVIDER_PATHS, document);
    
    viewIntent.SetDataAndType(contentUri, GetMimeType(document));
    viewIntent.SetFlags(ActivityFlags.NewTask);
    viewIntent.AddFlags(ActivityFlags.GrantReadUriPermission);
    Intent chooser = Intent.CreateChooser(viewIntent,
        "Which program shall open the file?");
    chooser.SetFlags(ActivityFlags.NewTask);
    chooser.AddFlags(ActivityFlags.GrantReadUriPermission);
    
    _context.StartActivity(chooser);