在三星手机中从相机意图捕获照片中获取 Uri Null



我在三星手机的 contenturi 中得到空,同时从相机捕获照片,但其他手机工作正常。

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {     
        super.onActivityResult(requestCode, resultCode, data);    
        try
        {
             if (requestCode == IMAGE_CAPTURE) {
                if (resultCode == RESULT_OK){
                    Uri contentUri = data.getData();
                    if(contentUri!=null)
                    {
                        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();         
                        imageUri = Uri.parse(cursor.getString(column_index));
                    }
                    tempBitmap = (Bitmap) data.getExtras().get("data"); 
                    mainImageView.setImageBitmap(tempBitmap);
                    isCaptureFromCamera = true;
                }
            }

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

从相机捕获照片后,我使用 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();
}
嗨,

我也面临着这个问题,就像我正在检查MOTO G上的应用程序一样,它不起作用,但在三星设备上它的工作 所以我做 下面的编码请检查:-

Uri

selectedImageUri = data.getData();

                try {
                    selectedImagePath = getPathBelowOs(selectedImageUri);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                if (selectedImagePath == null) {
                    try {
                        selectedImagePath = getPathUpperOs(selectedImageUri);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

public String getPathBelowOs(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}
/**
 * Getting image from Uri
 * 
 * @param contentUri
 * @return
 */
public String getPathUpperOs(Uri contentUri) {// Will return "image:x*"
    String wholeID = DocumentsContract.getDocumentId(contentUri);
    // Split at colon, use second item in the array
    String id = wholeID.split(":")[1];
    String[] column = { MediaStore.Images.Media.DATA };
    // where id is equal to
    String sel = MediaStore.Images.Media._ID + "=?";
    Cursor cursor = getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, column, sel,
            new String[] { id }, null);
    String filePath = "";
    int columnIndex = cursor.getColumnIndex(column[0]);
    if (cursor.moveToFirst()) {
        filePath = cursor.getString(columnIndex);
    }
    cursor.close();
    return filePath;
}

最新更新