使用MediaStore.ACTION_IMAGE_CAPTURE拍照 - 如何获取图像?

时间:2014-09-02 11:30:24

标签: android android-camera

我正在开发一款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 。它可以卸载,断开连接或不简单。

那么,拍摄照片的正确方法是什么?

是否有任何公共文件夹可以保证可用?像公共缓存目录这样的东西?到目前为止,我只能找到有关内部存储(非公开)和外部存储(无保证)的信息......

0 个答案:

没有答案