ActivityResultContracts.TakePicture сохраняет изображение в галерее вместо целевого URI.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 ActivityResultContracts.TakePicture сохраняет изображение в галерее вместо целевого URI.

Сообщение Anonymous »

В моем приложении для Android я использую ActivityResultContracts.TakePicture для хранения изображения в целевом URI, созданном из FileProvider. Вот как я отправляю намерение TakePicture и открываю камеру:

Код: Выделить всё

actionTakePicture = activity.registerForActivityResult(
new ActivityResultContracts.TakePicture(),
success -> onPictureTaken(success));

public void dispatchTakePictureIntent(@Nullable Bundle bundle) {`
// Create the File where the photo should go
File photoFile;
try {
photoFile = createImageFile();
} catch (IOException ex) {
throw new RuntimeException(ex);
}
this.bundle = bundle;
Uri photoURI = FileProvider.getUriForFile(activity,
"at.kandu.warehouse.fileprovider", photoFile);
actionTakePicture.launch(photoURI);
}

private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "JPEG_" + timeStamp + "_";
File storageDir = getExternalStorageFilesDir();
File image = File.createTempFile(
imageFileName,  /* prefix */
".jpg",         /* suffix */
storageDir      /* directory */
);

imagePath = image.getAbsolutePath();
return image;
}
Это есть в моем AndroidManifest.xml:

Код: Выделить всё


android:name="androidx.core.content.FileProvider"
android:authorities="at.kandu.warehouse.fileprovider"
android:exported="false"
android:grantUriPermissions="true">


А это мой файл file_paths: URI фотографии правильный, и при открытии приложения камеры создается целевой файл, но он пуст.
Моя проблема возникает после обновления версии или переустановки приложения для Android с последующей отправкой намерение TakePicture. В первый раз запрашивается разрешение на использование камеры, и приложение «Камера» открывается как отдельное приложение, как это видно на рисунке:
Приложение «Камера» как отдельное приложение в стек
Если я сделаю снимок в этот момент, изображение сохранится не в целевом файле в photoURI, а в фотогалерее телефона и намерение не возвращается и **onPictureTaken(success) **метод никогда не вызывается.
Если я попытаюсь снова открыть намерение TakePicture, приложение камеры будет выглядеть так, как будто оно является частью стека приложений, и правильно сохранит фотографии в целевом файле в photoURI
Приложение камеры является частью стека моего приложения
Кто-нибудь знает, как решить эту проблему ? Возможно, проблема в всплывающих окнах с разрешениями.
Я убедился, что файл существует в целевом photoURI. Разрешения на открытие камеры предоставлены. Это происходит только в первый раз, когда я отправляю намерение TakePicture после переустановки приложения.

Подробнее здесь: https://stackoverflow.com/questions/792 ... f-target-u
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»