【发布时间】:2019-05-29 01:43:03
【问题描述】:
TL;DR...
如何重新访问已共享到我的 Xamarin Android 应用程序的文件,该应用程序在第一次共享时有效,但当我稍后再次尝试访问它们时出现权限异常?
我正在编写我的第一个 Xamarin Android(不是 Forms)应用,我希望它能够“分享”照片和“添加”照片。
“分享”是指您打开图库,选择一张或多张照片,然后通过Intent.ActionSend 和Intent.ActionSendMultiple 将它们分享到我的应用程序。
“添加”是指您单击应用程序中的一个按钮,该按钮允许您通过Intent.ActionOpenDocument 添加照片。
我已经能够使用以下内容(取自this answer)对通过ActionOpenDocument 添加的图像设置“持久权限”...
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
if ((requestCode == c_addPhoto) && (resultCode == Result.Ok) && (data != null))
{
Uri uri = data.Data;
if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
ContentResolver.TakePersistableUriPermission(uri, ActivityFlags.GrantReadUriPermission);
AddToList(uri);
}
}
这行得通,当我重新打开应用程序时,使用 Uri 值访问图像,例如...
content://com.android.providers.media.documents/document/image%3A2122
我的问题是能够访问通过Intent.ActionSend 和Intent.ActionSendMultiple 共享的图像,其中通过Intent.ClipData.Item 传递的Uri 采用以下格式...
content://media/external/images/media/1998
如果我尝试在 Uri 上运行 TakePersistableUriPermission,然后将其传递给我的应用程序,则会收到以下异常...
Java.Lang.SecurityException:没有为 UID 10254 和 Uri content://media/external/images/media/1998 [user 0] 找到持久的权限授予
如果我尝试访问 Uri,我会收到以下异常...
权限拒绝:从 pid=4042、uid=10254 读取 com.android.providers.media.MediaProvider uri content://media/external/images/media/1998 需要 android.permission.READ_EXTERNAL_STORAGE 或 grantUriPermission()
但我确实在我的AndroidManifest.xml 文件中有以下内容...
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- 如何授予文件权限以供将来访问?
- 或者我是否需要将 Uri 从
content://media...格式转换为content://com.android...格式,如果需要,如何?
【问题讨论】:
标签: xamarin xamarin.android permissions