Я пытаюсь получить изображение из галереи устройств, а затем показать его в другом виде. код в моей деятельности:Предоставить разрешение Uri на другую деятельность
private void startGallery() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, REQ_OPEN_GALLERY)
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQ_OPEN_GALLERY && resultCode == Activity.RESULT_OK) {
Uri imageUri = data.getData()
// here I save image uri to pass to another activity
}
}
При попытке открыть в другой URI деятельности я получаю SecurityException
. Docs говорит, что разрешение на полученный uri длится до тех пор, пока не будет завершена работа, которая их получает. Поэтому, когда моя активность закончена, у меня нет разрешения на чтение файла.
Есть ли способ продлить разрешение на ури, чтобы разрешить другим действиям открыть файл с помощью этого uri? Или только способ скопировать изображение в локальное хранилище приложений?
UPD: Моя цель - сохранить полученный uri в локальной базе данных и разрешить другим действиям и услугам прочитать этот файл.
Извините. Мой вопрос недостаточно ясен. Моя цель - сохранить полученный uri в локальном db и разрешить другим действиям и сервисам читать этот файл. Обновленный ответ – nnesterov
@nnesterov: «Моя цель - сохранить полученный uri в локальном db» - это не сработает. Если вы используете 'ACTION_OPEN_DOCUMENT' на Android 4.4+, вы можете попробовать использовать' takePersistableUriPermission() ', и если это сработает, вы можете иметь долгосрочный доступ к контенту, идентифицированному' Uri'. В противном случае вам нужно сделать локальную копию содержимого. См. [Это пример приложения] (https://github.com/commonsguy/cw-omnibus/tree/master/Documents/Durable) для демонстрации этого. – CommonsWare