Android Jelly bean相机返回null URI

时间:2015-12-02 16:11:55

标签: java android android-camera 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 个答案:

答案 0 :(得分:1)

从您的代码中,您似乎正在尝试使用ACTION_IMAGE_CAPTURE。在这种情况下,永远不会成为Uri - data.getData()应始终返回null。如果相机应用程序碰巧返回Uri可能成为图像,但由于ACTION_IMAGE_CAPTURE未记录为返回Uri,您无法了解Uri的用途。

如果您在EXTRA_OUTPUT ACTION_IMAGE_CAPTURE上使用Intent,则知道应该存储图片的位置,因为您告诉相机应用程序存储位置。请注意,某些相机应用程序存在错误,无法兑现EXTRA_OUTPUT,无法将图像放在任何位置。

如果您没有使用EXTRA_OUTPUT,那么您将在"data"附加内容中获得缩略图。

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