我正在使用Xamarin开发Android应用程序。
我有一个用于选择图像的图像选择器。检索后,我将图像uri保存在本地sqlite数据库中。我在创建持久读取权限的意图时请求了正确的权限。
我遇到的问题是当我对我的应用程序进行更新时,我失去了uri读取权限。我的应用UID更改或该uri的权限撤销我的应用。我得到了错误没有持久的权限Grants为uid找到了。
如果可以在不使用意图并让用户重新选择图像的情况下再次请求uri的许可,我想知道什么?有没有办法阻止我的uid更改,以便在更新时现有的uri权限仍然有用。
******* *******更新
下面是我用来检索图像的图像意图:
if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
{
if (AndroidFilePermission.GetPermission(this, OPEN_IMAGE_CODE))
{
imageIntent.SetAction(Intent.ActionOpenDocument);
imageIntent.AddFlags(ActivityFlags.GrantPersistableUriPermission);
}
}
当Intent Picker回调返回到我的活动时,下面是OnActivityResult。我在SQLite DB中保存了这个uri。
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
var takeFlags = imageIntent.Flags
& (ActivityFlags.GrantReadUriPermission
| ActivityFlags.GrantWriteUriPermission);
if (resultCode == Result.Ok && requestCode == OPEN_IMAGE_CODE)
{
image_path = data.Data;
this.ContentResolver.TakePersistableUriPermission(image_path,
takeFlags);
this.img_field.Text =
System.IO.Path.GetFileName(image_path.Path);
LaunchDialog();
}
else
{
//create condition for when image/sound path cannot be resolved
LaunchDialog();
}
}