Я следил за этим учебным пособием Google, чтобы начать собирать изображение с помощью new Intent(MediaStore.ACTION_IMAGE_CAPTURE)
. В учебнике рекомендуется использовать общий каталог с getExternalStoragePublicDirectory
, который отлично подходит для моего приложения. Но вместо этого их пример использует getExternalFilesDir
. Затем передать URI файла в намерение с помощью MediaStore.EXTRA_OUTPUT
я получить URI содержимого, потому что я хотел бы настроить таргетинг на Android N. Перед тем, как настроить NI, просто передайте файл://URI и все, кроме Google, были счастливы. Теперь на N я начал получать FileUriExposedException
, который кажется не очень благоприятным.
Итак, если у меня есть файл вроде этого...
private File createImageFile() throws IOException {
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "MyAppFolder");
if (!storageDir.exists() && !storageDir.mkdir())
Log.w(TAG, "Couldn't create photo folder: " + storageDir.getAbsolutePath());
File image = new File(storageDir, timeStamp + ".jpg");
mCurrentPhotoPath = image.getAbsolutePath();
return image;
}
... Могу ли я использовать встроенный провайдер для каталога общедоступных изображений для получения URI контента? Если да, то как?
Я пробовал что-то вроде
takePictureIntent.putExtra(
MediaStore.EXTRA_OUTPUT,
FileProvider.getUriForFile(this, MediaStore.AUTHORITY, createImageFile()));
но он просто бросает
IllegalArgumentException: отсутствующие метаданные android.support.FILE_PROVIDER_PATHS
Правильно ли это Власть? Если я должен использовать собственный провайдер для совместного использования общего файла, то какой путь я могу указать в своих метафайлах FILE_PROVIDER_PATHS? Все параметры, которые я могу найти, предназначены для частных каталогов.