将图像从相机存储到私有应用缓存目录中

时间:2012-11-15 23:12:33

标签: android permissions camera

我想从相机中捕获图像并将其保存到私有应用缓存目录中。我意识到我必须给相机应用程序写入我的私人目录的权限,所以我添加了FLAG_GRANT_WRITE_URI_PERMISSION标志。

正在发生的事情是,相机应用程序打开,我可以拍照,但是当我点击确定按钮时,没有任何反应。相机应用程序保持打开状态没有日志输出。我想这是因为许可问题。

private void getCameraImage() {
    try {
        mTmpFile = File.createTempFile("tmp", ".jpg", getCacheDir());
        Uri imgUri = Uri.fromFile(mTmpFile);
        Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        i.putExtra(MediaStore.EXTRA_OUTPUT, imgUri);
        i.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        // i.setData(imgUri); // if uncommented, i get an ActivityNotFound Exception
        startActivityForResult(i, REQUEST_CAMERA);
    } catch (IOException e) {
        Log.e(TAG, "getCameraImage()", e);
        Toast.makeText(this, "Something went wrong", Toast.LENGTH_SHORT).show();
    }
}

有关我如何纠正的任何见解?

修改

当我将目录更改为公共SD卡时,它可以正常工作。

mTmpFile = File.createTempFile("tmp", ".jpg", Environment.getExternalStorageDirectory());

由于 西蒙

1 个答案:

答案 0 :(得分:2)

而不是传递Uri来存储图片,你可以使用http://developer.android.com/reference/android/hardware/Camera.html#takePicture(android.hardware.Camera.ShutterCallback,android.hardware.Camera.PictureCallback,android.hardware.Camera.PictureCallback,android.hardware.Camera.PictureCallback)

并获取应用内存中的内容。从那里你可以做任何你想做的事。

不要忘记相机应用程序也在使用图库,并且图库应用程序不允许检查您的私人目录。