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?

questionAnswers(2)

yourAnswerToTheQuestion