Я использую 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();
}
}