Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当我试图从相机拍摄的照片中获取Uri时,我得到空值_Android_Image_Camera_Save - Fatal编程技术网

Android 当我试图从相机拍摄的照片中获取Uri时,我得到空值

Android 当我试图从相机拍摄的照片中获取Uri时,我得到空值,android,image,camera,save,Android,Image,Camera,Save,这是我的问题,当我试图从相机拍摄的照片中获取Uri时,我在emulator和我的设备上的相机会得到null,但只有在使用另一个相机应用程序时,系统相机才会正常工作。这是我的密码 用于启动照相机应用程序 takePic.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MediaStore.ACTION_IMA

这是我的问题,当我试图从相机拍摄的照片中获取Uri时,我在emulator和我的设备上的相机会得到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);
   }
});
为了得到图像

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();
    }
  }
}
当活动返回时,outputFileUri始终为null。
谢谢。

在您进入活动结果之前,Android可能已经停止(并重新启动)您的活动,例如,因为您在拍照时旋转了设备。尝试使用活动状态的其余部分存储和还原
outputFileUri

protected void onSaveInstanceState(Bundle outState)
{
    outState.putParcelable("outputFileUri", outputFileUri);
}


我认为这个问题与在标准Android活动生命周期中管理outputFileUri成员变量有关

当您调用StartActivityForResult时,您的活动将停止,并且可能会被破坏。当捕获意图返回时,您的活动将被重新创建并恢复。您可能需要在这些生命周期事件中持久化outputFileUri的值

见和

我唯一能解释的是,为什么本机应用程序会这样做,而不管第三方相机应用程序不这样做,本机应用程序都会消耗资源,以至于您的活动确实被破坏,清除了outputFileUri


除了检查uri/文件路径以查看实际捕获的图像外,还值得查看onActivityResult中返回的结果代码,以确保camera intent表示OK。我敢打赌是的。

陷入了同样的境地。你找到解决这个问题的办法了吗?
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    if (savedInstanceState != null)
    {
        outputFileUri= savedInstanceState.getParcelable("outputFileUri");
    }
}