当我试图从用相机拍摄的照片中获取Uri时,我得到了null

lui*_*ero 3 camera android image save

这是我的问题,当我试图从我拍摄的照片中获取Uri时我会在模拟器和我的设备上使用相机获得null,但是如果我使用其他相机应用程序,只能使用系统相机,总是有效.这是我的代码

用于启动相机应用程序

takePic.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    String captured_image = System.currentTimeMillis() + ".jpg";
    File file = new File(Environment.getExternalStorageDirectory(), captured_image); 
    captured_image = file.getAbsolutePath();
    outputFileUri = Uri.fromFile(file); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
    intent.putExtra("return-data", true);
    startActivityForResult(intent, CAMERA_REQUEST);
   }
});
Run Code Online (Sandbox Code Playgroud)

获取图像

protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  if (requestCode == CAMERA_REQUEST) { 
    ContentResolver cr = getContentResolver();
    InputStream in = null;
    try 
    {
        in = cr.openInputStream(outputFileUri); 
    } 
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

当活动返回时,outputFileUri始终为null.谢谢.

Pau*_*Jan 11

Android可能会在您进入之前杀死(并重新启动)您的活动onActivityResult,例如因为您在拍照时旋转了设备.尝试outputFileUri使用其余的Activity状态存储和恢复...

protected void onSaveInstanceState(Bundle outState)
{
    outState.putParcelable("outputFileUri", outputFileUri);
}
Run Code Online (Sandbox Code Playgroud)

...

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    if (savedInstanceState != null)
    {
        outputFileUri= savedInstanceState.getParcelable("outputFileUri");
    }
}
Run Code Online (Sandbox Code Playgroud)