Android: Como salvar o resultado da câmera em um arquivo privado

Eu estou tentando obter uma imagem da câmera e salvá-lo diretamente no diretório de arquivos privados do meu aplicativo. Por questões de segurança, a imagem não deve estar publicamente acessível a qualquer momento.

Em geral, a maneira como você concede acesso temporário a um arquivo privado é usar um ContentProvider e definir o sinalizador GRANT_WRITE_URI_PERMISSION no Intent. Seguindo a documentação emFileProviderEu fiz o seguinte:

AndroidManfiest.xml

<manifest> 
    ...
    <application>
        ...
        <provider
            android:authorities="com.my.domain"
            android:name="android.support.v4.content.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
        ...

res / xml / file_paths.xml

<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <files-path name="my_images" path="images/"/>
</paths>

Ao iniciar a atividade da câmera, eu executo o seguinte de uma atividade:

File imageFile = getInternalImageFile();
Uri captureUri = FileProvider.getUriForFile(this, "com.my.domain", imageFile);

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

// grant temporary access to the file
intent.setData(captureUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

// tell the camera where to save the file
intent.putExtra(MediaStore.EXTRA_OUTPUT, captureUri);

startActivityForResult(intent, IMAGE_CAPTURE_REQUEST_CODE);

Isso, no entanto, faz com que o aplicativo da câmera retorne imediatamente sem fazer nada. Eu suspeito porque não está esperando que haja algum conjunto de dados na intenção (Intent.setData ()).

A estratégia acima não está funcionando tão bem. Então, como posso salvar com segurança uma imagem capturada da câmera diretamente no diretório de arquivos privados do meu aplicativo?

questionAnswers(2)

yourAnswerToTheQuestion