2013-03-10 3 views
2

Я работаю с 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(); 
    } 
} 
+0

Какая проблема у вас есть в этом ?? –

+0

java.lang.RuntimeException: Ошибка предоставления результата ResultInfo {who = null, request = 0, result = -1, data = Intent {act = inline-data (имеет дополнительные функции)}} для действия {com.example.cameratest/com .example.cameratest.MainActivity}: java.lang.NullPointerException –

+0

Отладка вашего приложения 'selectedImageUri' является NULL и дайте мне знать, если это .. –

ответ

7

Его выше код работает в некоторых мобильных, но не работает в Samsung Mobile в моем случае, так что я реализовал общую логику для всех устройств.

Когда я снимаю фотографию с камеры, я реализую логику с помощью курсора и перебираю курсор и получаю последний путь фотографии, который является захватом с камеры.

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(); 
} 
+0

Ничего себе! Оно работает!! большое спасибо –

+0

@ КостяХута, мое удовольствие помочь вам .. !!! –

+0

В случае Samsung S5 изображение, как правило, будет высокого качества. Как сжать это изображение, если мне нужно загрузить его на сервер? –

5

Ответ дается @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(); 
}