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?