我试图从相机中获取图像并将其直接保存到我的应用程序的私人文件目录中.出于安全考虑,图像不应随时公开访问.
通常,授予对私有文件的临时访问权限的方式是使用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()).
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。