Android: So speichern Sie das Kameraergebnis in einer privaten Datei

Ich versuche, ein Bild von der Kamera abzurufen und es direkt im privaten Dateiverzeichnis meiner App zu speichern. Aus Sicherheitsgründen sollte das Bild zu keinem Zeitpunkt öffentlich zugänglich sein.

Im Allgemeinen können Sie temporären Zugriff auf eine private Datei gewähren, indem Sie einen ContentProvider verwenden und das Flag GRANT_WRITE_URI_PERMISSION im Intent setzen. Im Anschluss an die Dokumentation inFileProviderFolgendes habe ich getan:

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>

Beim Starten der Kameraaktivität führe ich Folgendes aus einer Aktivität aus:

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);

Dies führt jedoch dazu, dass die Kamera-App sofort zurückkehrt, ohne etwas zu tun. Ich vermute, weil es nicht erwartet, dass es einen Datensatz auf Intent (Intent.setData ()) gibt.

Die obige Strategie funktioniert nicht so gut. Wie kann ich ein von der Kamera aufgenommenes Bild sicher direkt im privaten Dateiverzeichnis meiner App speichern?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage