【问题标题】:Store image from camera into private app cache directory将相机中的图像存储到私有应用程序缓存目录中
【发布时间】:2012-11-15 23:12:33
【问题描述】:

我想从相机中捕获图像并将其保存到私有应用缓存目录。我意识到我必须授予相机应用写入我的私人目录的权限,所以我添加了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());

谢谢 西蒙

【问题讨论】:

  • 如果是权限问题,LogCat 中会出现错误。
  • 不确定。即使我删除了 FLAG_GRANT_WRITE_URI_PERMISSION 标志,我也没有得到任何日志输出。也许相机应用程序会检查权限,如果无法写入文件,则会中止操作。

标签: android permissions camera


【解决方案1】:

您可以使用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 代替传递Uri 来存储图片)

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

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

【讨论】:

  • 嗯,这是一种非常不同的获取图片的方式,而不是我想要的方式。它实际上不是原始问题的答案,但仍可能解决问题。由于我不再使用该应用程序,因此无法测试解决方案,我将继续接受答案 - 无论如何它是唯一的:-)
  • 非常感谢您的赞赏,是的,这不是您问题的直接答案,但正如您所说,这是唯一可能做一些“属于”您的应用程序而不是任何其他应用程序的事情使用媒体。我自己用这个方法...谢谢
  • 此解决方案在 API 21 中已弃用
猜你喜欢
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多