Android: como obter um conteúdo: // URI para um arquivo no diretório PUBLIC de armazenamento externo
Eu seguieste tutorial do Google iniciar a intenção de capturar uma imagem comnew Intent(MediaStore.ACTION_IMAGE_CAPTURE)
. O tutorial recomenda o uso do diretório público comgetExternalStoragePublicDirectory
o que seria ótimo para o meu aplicativo. Mas então o exemplo deles usagetExternalFilesDir
. Em seguida, para passar o URI do arquivo para a intenção comMediaStore.EXTRA_OUTPUT
I precisa obter um URI de conteúdo porque gostaria de segmentar o Android N. Antes de segmentar o N, passaria apenas um arquivo: // URI e todos, exceto o Google, estavam felizes. Agora, no N, comecei a receber oFileUriExposedException
isso parece sernão muito favorável.
Então, como eu tenho um arquivo como este ...
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;
}
... posso usar um provedor interno para o diretório de imagens públicas para obter um URI de conteúdo? Se sim, como?
Eu tentei algo como
takePictureIntent.putExtra(
MediaStore.EXTRA_OUTPUT,
FileProvider.getUriForFile(this, MediaStore.AUTHORITY, createImageFile()));
mas apenas joga
IllegalArgumentException: meta-dados android.support.FILE_PROVIDER_PATHS ausentes
Essa autoridade está correta? Se eu devo usar meu próprio provedor para compartilhar o arquivo público, que caminho posso especificar nos meus metadados FILE_PROVIDER_PATHS? Todos osopções que posso encontrar são para diretórios particulares.