【问题标题】:When i try to get the Uri from a picture taken with the camera i get null当我尝试从用相机拍摄的照片中获取 Uri 时,我得到了 null
【发布时间】:2012-04-04 06:31:35
【问题描述】:

这是我的问题,当我尝试从我用相机拍摄的照片中获取 Uri 时,我在模拟器和我的设备上使用相机,但只有在我使用另一个相机应用程序时才会使用系统相机,总是作品。这是我的代码

用于启动相机应用

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 image camera save


【解决方案1】:

Android 可能会在您进入onActivityResult 之前终止(并重新启动)您的活动,例如因为您在拍照时旋转了设备。尝试将 outputFileUri 与 Activity 状态的其余部分一起存储和恢复...

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

...

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

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

【讨论】:

    【解决方案2】:

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

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

    请参阅 onCreateonSaveInstanceState

    我唯一能解释为什么原生应用程序会这样做,而无论 3rd 方相机应用程序不会是原生应用程序以某种方式消耗资源,以至于您的活动确实被破坏,从而消除了您的 outputFileUri。

    p>

    除了检查 uri/filepath 以查看实际捕获的图像之外,还可能需要查看 onActivityResult 返回的结果代码以确保相机意图显示正常。我敢打赌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多