2014-04-18 36 views
1

圖像路徑當我拿起從畫廊的一些照片,他們接下來的URI獲取的Android

content://com.google.android.apps.photos.content/0/https%3A%2F%2Flh3.googleusercontent.com%2F1cSCAm2mqyFgOUPR8d_8Modz0Cgu6yn1nsznrhfzQTw%3Ds0-d 

,而不是像

content://media/external/images/media/3728 

,我不能得到這個圖片的路徑。我該如何解決這個問題?

我的代碼:

case RC_SELECT_PICTURE: 
      Uri pickedImage = data.getData(); 
      // Let's read picked image path using content resolver 
      String[] filePath = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getActivity().getContentResolver().query(pickedImage, filePath, null, null, null); 
      cursor.moveToFirst(); 
      String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0])); 
      cursor.close(); 
      break; 

我嘗試使用一些方法,我在計算器上找到致富filePath,但該路徑是URL。我可以使用它下載我的圖像。我需要得到當地filePath

+0

http://stackoverflow.com/questions/3401579/get-filename-and-path-from-uri-from-mediastore – RQube

+0

您正在使用的設備? –

+0

你曾經解決過這個問題嗎?我面臨同樣的問題。我需要本地路徑而不是Picasa網址。 – Paul

回答

2

A Uri從未必須映射到File路徑

現在,事實證明,MediaStore泄漏路徑,一些白癡推動了使用這些泄漏的模式,導致很多開發人員認爲這是可靠的行爲。事實並非如此。 A ContentProvider可以提供各種流,而不是由您有權訪問的文件支持,例如將文件放在內部存儲上。

如果您需要此Uri指向的圖像內容,或者您​​想知道其MIME類型,請使用ContentResolver

+0

這也揭示了我的uri問題,但如果你可以發佈或鏈接到一些示例代碼,這將是非常棒的 – kabuto178

+0

@ kabuto178:我不太確定你需要什麼示例代碼。 'ContentResolver'具有像''openInputStream()'](https://developer.android.com/reference/android/content/ContentResolver.html#openInputStream(android.net.Uri))和['getType()' ](https://developer.android.com/reference/android/content/ContentResolver.html#getType(android.net.Uri)),你可以使用。你可以通過在任何'Context'上調用'getContentResolver()'來獲得'ContentResolver',比如'Activity'。 – CommonsWare

+0

啊,contentresolver會向後兼容嗎? – kabuto178

-1

嘗試當你從畫廊去挑選圖像,這可能hepls你

檢查的Android SDK版本。

if (Build.VERSION.SDK_INT <19){ 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_picture)),GALLERY_INTENT_CALLED); 
} else { 
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
    intent.addCategory(Intent.CATEGORY_OPENABLE); 
    intent.setType("image/*"); 
    startActivityForResult(intent, GALLERY_KITKAT_INTENT_CALLED); 
} 
+0

在我的情況下,你的方法'getAbsolutePath'返回'null'值 –

+0

這不會處理問題所關心的'Uri'。它不會處理大量的'Uri'值,特別是在Android 4.4+上。 – CommonsWare