Xamarin OpenInputStream权限ACTION_OPEN_DOCUMEN

时间:2018-04-16 20:27:17

标签: android xamarin xamarin.android permission-denied

我正在Android上开发一个应用程序,当我使用openInputStream和某些uri时,我得到一个异常,这是我的代码

try
{
   using (var stream = Context.ContentResolver.OpenInputStream(Android.Net.Uri.Parse(uriString)))
   {
      //
   }
}
catch (Exception e)
{
}

当uri ='content:// media / external / images / media / 61155'时我没有异常

但当uri是这样的'content://com.android.providers.media.documents/document/image%3A61797'

我得到了这个例外

  

权限拒绝:从ProcessRecord ....打开提供程序com.android.providers.media.MediaDocumentsProvider要求您使用ACTION_OPEN_DOCUMENT或相关API获取访问权限

我不知道如何解决这个问题

我正在使用android oreo 8.0的设备进行测试

最小android sdk api 21(Lollipop 5.0)

目标android sdk api 24(Nougat 7.0)

1 个答案:

答案 0 :(得分:1)

假设您正在执行文档打开的Intent,您需要通过TakePersistableUriPermission

请求您需要的uri权限(读取和/或写入)
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    if (requestCode == (int)ResultCode.Chooser && resultCode.HasFlag(Result.Ok))
    {
        var uri = data.Data;
        if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
        {
            ContentResolver.TakePersistableUriPermission(uri, ActivityFlags.GrantReadUriPermission);
        }
        using (var stream = ContentResolver.OpenInputStream(uri))
        {          
            Log.Debug("TAG", uri.ToString());
        }
    }
}

re:takePersistableUriPermission