【问题标题】:How to get image path from camera intent?如何从相机意图中获取图像路径?
【发布时间】:2013-03-10 13:20:21
【问题描述】:

我使用 android 2.1,我想从相机意图结果中获取真实路径。我读过Get Path of image from ACTION_IMAGE_CAPTURE Intent,但它适用于android 2.2。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if (requestCode == CAMERA_RESULT)
    {
        Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
        imv.setImageBitmap(thumbnail);
         Uri selectedImageUri = data.getData();
         String path = getRealPathFromURI(selectedImageUri);
    }
}

private String getRealPathFromURI(Uri contentUri)
{
    try
    {
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(contentUri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
    catch (Exception e)
    {
        return contentUri.getPath();
    }
}

【问题讨论】:

  • 你有什么问题?
  • java.lang.RuntimeException: 将结果 ResultInfo{who=null, request=0, result=-1, data=Intent { act=inline-data (has extras) }} 传递给活动 { com.example.cameratest/com.example.cameratest.MainActivity}:java.lang.NullPointerException
  • 调试您的应用程序 selectedImageUri 为 NULL 并让我知道这是否......
  • Uri selectedImageUri = data.getData(); if (selectedImageUri == null) { Log.d(LOG_TAG, "Yes");是的,它是空的

标签: android image android-intent camera


【解决方案1】:

上面的代码适用于某些手机,但在我的情况下不适用于三星手机,所以我为所有设备实现了通用逻辑。

当我从相机捕捉照片时,我使用 Cursor 实现逻辑并迭代光标并获取从相机捕捉的最后一张照片路径。

Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
if(cursor != null && cursor.moveToFirst())
{
    do {
        uri = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA)));
        photoPath = uri.toString();
    }while(cursor.moveToNext());
    cursor.close();
}

【讨论】:

  • 对于三星 S5,返回的图像通常是高质量的。如果我需要将此图像上传到服务器,如何压缩此图像?
【解决方案2】:

@TGMCians 给出的答案有效,但我能够进一步即兴发挥,如下所示

Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, new String[]{Media.DATA, Media.DATE_ADDED, MediaStore.Images.ImageColumns.ORIENTATION}, Media.DATE_ADDED, null, "date_added ASC");
if(cursor != null && cursor.moveToLast()){
    Uri fileURI = Uri.parse(cursor.getString(cursor.getColumnIndex(Media.DATA)));
    String fileSrc = fileURI.toString();
    cursor.close();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-24
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多