Android: как сохранить результат с камеры в приватный файл
Я пытаюсь получить изображение с камеры и сохранить его непосредственно в каталоге личных файлов моего приложения. В целях безопасности изображение не должно быть общедоступным в любое время.
В общем случае, вы предоставляете временный доступ к личному файлу, используя ContentProvider и устанавливая флаг GRANT_WRITE_URI_PERMISSION в Intent. Следуя документации вFileProviderЯ сделал следующее:
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>
...
Рез / XML / file_paths.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<files-path name="my_images" path="images/"/>
</paths>
При запуске действия камеры я выполняю следующее из действия:
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);
Это, однако, приводит к немедленному возвращению приложения камеры, ничего не делая. Я подозреваю, потому что он не ожидает, что будет какой-либо набор данных по намерению (Intent.setData ()).
Выше стратегия не работает так хорошо. Итак, как я могу безопасно сохранить изображение, снятое с камеры, прямо в папку личных файлов моего приложения?