Android: Jak zapisać wynik kamery w prywatnym pliku
Próbuję uzyskać obraz z kamery i zapisać go bezpośrednio w katalogu prywatnych plików mojej aplikacji. Ze względów bezpieczeństwa obraz nie powinien być publicznie dostępny w żadnym momencie.
Ogólnie rzecz biorąc, sposób nadawania tymczasowego dostępu do pliku prywatnego polega na użyciu ContentProvider i ustawieniu flagi GRANT_WRITE_URI_PERMISSION w polu Intent. Śledzenie dokumentacji wFileProvider, Zrobiłem co następuje:
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>
Podczas uruchamiania aktywności aparatu wykonuję następujące czynności z działania:
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);
To jednak powoduje, że aplikacja aparatu powraca natychmiast, nie robiąc nic. Podejrzewam, ponieważ nie spodziewa się, że będzie jakiś zestaw danych w intencji (Intent.setData ()).
Powyższa strategia nie działa tak dobrze. Jak więc mogę bezpiecznie zapisać obraz przechwycony z kamery bezpośrednio do katalogu prywatnych plików mojej aplikacji?