我正在尝试按照tutorial调用相机应用程序并要求它将图片保存在意图中传递的uri中。
File image = File.createTempFile("testImage", ".jpg",
getExternalFilesDir(Environment.DIRECTORY_PICTURES));
Uri uri = Uri.fromFile(image);
Intent i = new Intent();
i.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
i.putExtra(MediaStore.EXTRA_OUTPUT, uri);
if (i.resolveActivity(getPackageManager()) != null) {
startActivityForResult(i, 1);
}
图片的路径是:
/storage/emulated/0/Android/data/com.android.test1.app/files/Pictures/testImage-516714791.jpg
我想问一下相机应用程序是如何获得写入此路径的权限的?我在Android 4.4上进行测试,因此路径ExternalFilesDir
不可公开写入。
答案 0 :(得分:2)
这些文件没有强制执行安全措施。例如,任何持有WRITE_EXTERNAL_STORAGE的应用程序都可以写入这些文件。
从KITKAT开始,读取或写入返回的路径不需要任何权限;它总是可以访问调用应用程序。这仅适用于为调用应用程序的包名生成的路径。要访问属于其他包的路径,需要WRITE_EXTERNAL_STORAGE和/或READ_EXTERNAL_STORAGE。
因此,系统相机应用或获得WRITE_EXTERNAL_STORAGE
权限的任何其他应用都可以写入/storage/emulated/0/Android/data/com.android.test1.app/files/Pictures/
。