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
传递的Uri所在的Intent.ActionSendMultiple
和Intent.ClipData.Item
共享的图像以下格式...
content://media/external/images/media/1998
如果我将TakePersistableUriPermission
传递到应用程序后在Uri上运行,则会收到以下异常...
Java.Lang.SecurityException:未找到针对UID 10254和Uri content:// media / external / images / media / 1998 [user 0]的持久权限授予
如果我尝试访问Uri,则会收到以下异常...
拒绝权限:从pid = 4042读取com.android.providers.media.MediaProvider uri content:// media / external / images / media / 1998,uid = 10254需要android.permission.READ_EXTERNAL_STORAGE或grantUriPermission()< / p>
但是我做在我的AndroidManifest.xml
文件中具有以下内容...
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
content://media...
转换为content://com.android...
格式?如果是,怎么办?答案 0 :(得分:0)
您是否已通过Android解决方案中的File / Content Provider实现? 这是我为Xamarin Forms应用程序回答的问题,尽管对于Xamarin Android应该是相同的,因为您需要在Android平台特定项目中为File Provider做的所有事情: File Download in Xamarin forms
Android自Api 22版起定义了文件/内容提供程序,这意味着如果您的应用程序在该版本上运行或更高版本,则必须定义文件提供程序才能使您的应用程序能够共享文件。
这是官方页面https://developer.android.com/reference/android/support/v4/content/FileProvider