我正在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)
答案 0 :(得分:1)
假设您正在执行文档打开的Intent,您需要通过TakePersistableUriPermission
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());
}
}
}