如果已知uri,则请求uri读取权限

时间:2018-05-07 21:57:23

标签: android android-permissions

我正在使用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();
            }
}

0 个答案:

没有答案