2013-03-10 118 views
2

我使用的是android 2.1,我想從Camera intent結果中獲得真實路徑。我讀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

你在這有什麼問題? – 2013-03-10 13:38:23

+0

java.lang.RuntimeException:將結果ResultInfo {who = null,request = 0,result = -1,data = Intent {act = inline-data(has extras)}}傳遞給activity {com.example.cameratest/com .example.cameratest.MainActivity}:java.lang.NullPointerException – 2013-03-10 13:52:36

+0

調試你的應用程序'selectedImageUri'爲NULL,並讓我知道如果這.. – 2013-03-10 13:55:09

回答

7

它上面的代碼工作在一些移動,但不會在三星手機在我的情況,所以我實現的公共邏輯適用於所有設備。

當我從相機捕捉照片,所以我實現了一個使用光標的邏輯,迭代光標,並獲得從相機捕獲的最後一個照片路徑。

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

哇!有用!!非常感謝 – 2013-03-10 14:21:39

+0

@KostyaKhuta我的榮幸幫助你.. !!! – 2013-03-10 14:24:51

+0

在三星S5的情況下,返回的圖像通常質量很高。如果我需要將此圖像上載到服務器,如何壓縮此圖像? – 2015-10-14 15:39:28

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(); 
} 
相關問題