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.

questionAnswers(2)

yourAnswerToTheQuestion