2015-10-19 145 views
0

我有此代码拍摄照片并将照片保存在/data/data/...中,但拍照后我得到Image saved to: /media/external/images/media/a_number。我检查了/data/data/...目录,图片文件不存在。拍摄照片并保存到/ 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 
     } 
    } 
} 
+0

它看起来升艾克你做得对。我认为getFilesDir返回的目录是依赖于设备的。你在用什么? – elevine

+0

我也有同样的问题:原因是期望应用程序没有人可以写入应用程序的私人区域。我会建议使用应用程序的外部私人领域是世界可读和可写的IE /存储/模拟/ 0 /安卓/ <你的包名称> /文件/ – dex

回答

1

第三方相机应用程序无权写入您的部分internal storage

欢迎您来尝试写支持流API和支持写入到内部存储器的ContentProvider,然后用content://UriACTION_IMAGE_CAPTURE。我没有试过这个,所以我不知道它的工作效果如何,我怀疑许多相机应用程序不会期望在那里有content://Uri

否则,你的选择是:

  • 给第三方相机应用的位置上external storage,然后复制自己的文件导入到内部存储,或

  • 不要使用ACTION_IMAGE_CAPTURE,但改用Camera和/或camera2的API直接在您的应用程序拍照

+0

请解释一下这个“不使用ACTION_IMAGE_CAPTURE,而是使用摄像头和/或camera2 APIs直接在你的应用程序中拍摄照片“。 – dex

+0

@dex:http://developer.android.com/guide/topics/media/camera.html – CommonsWare

+0

@comonsWare感谢很多:) – dex

相关问题