Запросите разрешение на чтение URI, если URI уже известен - PullRequest
0 голосов
/ 08 мая 2018

Я использую Xamarin для разработки приложения для Android.

У меня есть средство выбора изображений, которое я использую для выбора изображения. После получения я сохраняю изображение URI в локальной базе данных sqlite. Я запросил правильные разрешения при создании намерения для постоянного разрешения на чтение.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я обновляю свое приложение, я теряю разрешение на чтение URI. UID моего приложения изменяется или разрешение для этого URI отменяет мое приложение. Я получаю сообщение об ошибке Нет постоянного разрешения Гранты найдены для UID.

Что я хотел бы знать, можно ли снова запросить разрешение для URI без использования намерения и без повторного выбора пользователем изображения? Есть ли способ остановить изменение uid, чтобы при обновлении все еще работали существующие разрешения uri.

******* ******** Update 1009 *

Ниже приведено намерение «Изображение», которое я использую для извлечения изображения:

if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat)
{
    if (AndroidFilePermission.GetPermission(this, OPEN_IMAGE_CODE))
    {
        imageIntent.SetAction(Intent.ActionOpenDocument);            
        imageIntent.AddFlags(ActivityFlags.GrantPersistableUriPermission);
    }
}

Ниже приведен OnActivityResult, когда обратный вызов Intent Picker возвращается к моей активности. Я сохраняю этот URI в БД SQLite.

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();
            }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...