我使用FileProvider使用我的设备相机拍照,但图片未保存在目录或任何其他目录中。如何解决问题以便将捕获的图像保存在目录中?
MainActivity.java
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File storageDir = new File(Environment.getExternalStorageDirectory(), "Test-Folder");
if (!storageDir.exists()) {
storageDir.mkdirs();
}
File image = new File(storageDir, "QR_" + timeStamp + ".png");
Uri photoUri = FileProvider.getUriForFile(MainActivity.this, "com.test", image);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
List<ResolveInfo> resInfoList =
getPackageManager()
.queryIntentActivities(cameraIntent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
grantUriPermission(packageName, photoUri,
Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
}
startActivityForResult(cameraIntent, 1);
provider_paths.xml
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path name="external_files" path="Test-Folder/"/>
</paths>
答案 0 :(得分:0)
这是解决方案。
storageDir.mkdirs();
上面的代码返回 false ,这是因为我没有在外部存储中写入权限。我在我的android清单文件中添加了以下代码。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- other code here-->
</manifest>
感谢 greenapp 指出storageDir.mkdirs。