2015-12-02 72 views
1

我正尝试使用相机在我的应用程序中拍照,然后裁剪拍摄的图像。Android果冻豆相机返回null URI

一切正在为最新版本的Android工作,但不适用于Android Kitkat 4.4.2。

Camera返回空URI。

得到URI onActivityReslult:

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == CAMERA_CODE && resultCode == RESULT_OK) { 
      Bundle extras = data.getExtras(); 
      Bitmap imageBitmap = (Bitmap) extras.get("data"); 

      picUri = data.getData(); 
      Intent i = new Intent(PublierActivity.this, CropActivity.class); 
      i.putExtra("Uri", picUri); 
      startActivityForResult(i, CROP_CODE); 

     } 

这里是我如何调用摄像头意图:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
        startActivityForResult(takePictureIntent, CAMERA_CODE); 
       } 

有没有什么办法来做出最古老版本的Android例外来解决这个问题呢?

回答

1

从您的代码中,您会看到您正在尝试使用ACTION_IMAGE_CAPTURE。在这种情况下,应该有从不Uridata.getData()应该总是返回null。如果相机应用碰巧返回Uri,那么可能是是图像,但由于ACTION_IMAGE_CAPTURE未记录为返回Uri,因此您无法知道Uri的作用。

如果您在ACTION_IMAGE_CAPTUREIntent上使用EXTRA_OUTPUT,您知道应该在哪里存储图像,因为您告诉相机应用程序存储它的位置。请注意,某些相机应用程序是越野车,无法兑现EXTRA_OUTPUT,将图像放在任何他们想要的地方。

如果您不使用EXTRA_OUTPUT,那么您将在"data"额外获得缩略图。

此外,请记住,这与Android操作系统版本无关,并且与用户选择使用的相机应用程序有关。有数以千计的Android设备型号。这些装载有数十个,如果不是数百个,预装了不同的相机应用程序。用户也可能选择安装第三方相机应用程序。任何这些都可以处理您的请求。