我正在开发一款Android 4+应用程序,该应用程序应该为用户提供在应用程序中拍摄和保存图片的可能性。我很困惑在Android中如何处理这个问题:
private void takePicture() {
File targetDir = new File(somewere in the filesystem...);
targetDir.mkdirs();
File targetFile = new File(targetDir, UUID.randomUUID().toString());
Uri targetFilrUri = Uri.fromFile(targetFile);
pictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, targetFilrUri);
startActivityForResult(pictureIntent, actionID);
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if(resultCode == RESULT_OK) {
...
}
}
如果targetDir
是公共文件夹,例如,这可以正常运行,没有任何问题。在Environment.getExternalStorageDirectory()
内。一旦我尝试在apps内部目录中使用文件夹,ACTION_IMAGE_CAPTURE
活动就不再起作用了。我仍然可以拍照,但活动不再返回我的应用程序。返回我的应用的唯一方法是取消ACTION_IMAGE_CAPTURE
。
这不是一个非常好的问题/错误处理,但至少ACTION_IMAGE_CAPTURE
行为的方式是有道理的: ACTION_IMAGE_CAPTURE
" app"无法访问其他应用(我的应用)的内部存储空间以将图片保存在那里。
好的,现在我只能将照片保存到ExternalStorageDirector
。这样就行了(可以手动复制/移动它们),但问题是,无法保证,甚至还有ExternalStorageDirector
。它可以卸载,断开连接或不简单。
那么,拍摄照片的正确方法是什么?
是否有任何公共文件夹可以保证可用?像公共缓存目录这样的东西?到目前为止,我只能找到有关内部存储(非公开)和外部存储(无保证)的信息......