我试图从相机中获取图像并将其直接保存到我的应用程序的私人文件目录中.出于安全考虑,图像不应随时公开访问.
通常,授予对私有文件的临时访问权限的方式是使用ContentProvider并在Intent中设置GRANT_WRITE_URI_PERMISSION标志.按照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> ...
RES / 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上有任何数据集(Intent.setData()).