Использовать камеру на Android 8 без разрешения WRITE_EXTERNAL_STORAGE - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь заставить мое приложение захватить изображение и отправить его на сервер, не сохраняя в файловой системе.

Если я сделаю это так:

intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, SOME_REQUEST_CODE);

В onActivityResult Я могу извлечь изображение через

Bitmap photo = (Bitmap) data.getExtras().get("data");

, но это дает мне только thumbnail .

Из документации видно, что (один из?) способов получить изображение в формате Full HD - дать приложению камеры команду сохранить изображение в каком-либо внешнем месте, добавив

intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

Однако для этого, очевидно, требуется WRITE_EXTERNAL_STORAGE

Учитывая, что мне не нужно хранить изображение в файловой системе, так как я все равно отправляю его по сети, я полагаю, что спрашиваю разрешение на дополнительное хранение противоречит принципу «спроси только, что тебе нужно» Так есть ли возможность каким-то образом получить полный образ HD в памяти и не запрашивать у пользователя разрешения на хранение? Возможно, существует какой-то специальный FileProvider тип пути для таких случаев?

Я нашел этот ответ: Захват изображения без разрешения с Android 6.0 , но это не так использовать FileProvider (который я должен использовать на Android 8) и, похоже, не подходит для моего случая.

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 января 2020

Просто используйте файловый провайдер и сохраните его в getFilesDir или getExternalFilesDir, и вам не нужно разрешение WRITE или запросите пользователя ..

1 голос
/ 06 января 2020

Системные приложения камеры или сторонние приложения камеры не могут получить доступ к внутреннему хранилищу вашего приложения, а также ваше приложение не может получить доступ к внутреннему хранилищу другого приложения камеры, поэтому, похоже, нет способа избежать того, что Внешнее хранилище передает данные между вашим приложением и приложением камеры ( RAM не вариант, потому что изображение или видео, по которым щелкают, могут иметь большие размеры).

...