拍照并将其保存在/ data / data中

时间:2015-10-19 14:20:11

标签: android

我有这段代码来拍照并将图片保存在/data/data/...中,但拍完照片后我得到了Image saved to: /media/external/images/media/a_number。我检查了/data/data/...目录,图片文件不存在。

protected void onCreate(Bundle savedInstanceState) {
    context = this;

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    File fileUri = new File(context.getFilesDir(), "INSTALLATION.jpg");

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);


    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name


    // start the image capture Intent
    startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
  //...
}


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {

            // Image captured and saved to fileUri specified in the Intent
            Toast.makeText(this, "Image saved to:\n" + data.getData(), Toast.LENGTH_LONG).show();

        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
        }
    }
}

1 个答案:

答案 0 :(得分:1)

第三方相机应用无权写入您internal storage的部分内容。

欢迎您尝试编写支持流式API的ContentProvider并支持写入内部存储,然后使用content:// Uri获取ACTION_IMAGE_CAPTURE。我没试过这个,所以我不知道它有多好用,我怀疑很多相机应用程序不会指望content:// Uri

否则,您的选择是:

  • 将第三方相机应用程序放在external storage上的某个位置,然后将文件自行复制到内部存储空间,或

  • 请勿使用ACTION_IMAGE_CAPTURE,而是使用Camera和/或camera2 API直接在您的应用中制作照片