2009-02-15 83 views
41

就像iPhone有UIImagePickerController讓用戶訪問設備上存儲的圖片一樣,我們是否有類似的Android SDK控件?從我的Android應用中的圖片應用訪問圖片

謝謝。

+1

我相信你所謂android.provider和一類叫做MediaStore.Images內容提供商之後[詳細信息可以在這裏找到。(HTTP:/ /developer.android.com/reference/android/provider/package-summary.html) – GregD 2009-02-15 15:07:41

回答

83

您可以使用startActivityForResult,傳入描述您要完成的操作的Intent,以及傳入數據源以執行操作。

幸運的是,Android包括採摘事的行動:Intent.ACTION__PICK和數據源包含圖片: android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI本地設備上的圖像或 android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI SD卡上的圖像。

呼叫startActivityForResult通過在取行動,並希望用戶從這樣的選擇圖像:

startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE); 

然後覆蓋onActivityResult監聽用戶作出選擇。

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == SELECT_IMAGE) 
    if (resultCode == Activity.RESULT_OK) { 
     Uri selectedImage = data.getData(); 
     // TODO Do something with the select image URI 
    } 
} 

一旦你有圖像你可以使用它來訪問圖像,並做你需要做的任何事情。

+0

我的onactivityresult沒有被調用時使用此...任何建議?我設置了外部存儲權限 – 2011-11-02 11:00:04

+0

要查看您是如何從selectedImage變量中檢索文件路徑的,請查看此答案:http://stackoverflow.com/a/10474167 – Tiago 2013-11-11 22:36:08

22

你也可以這樣做:

Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); 
photoPickerIntent.setType("image/*"); 
startActivityForResult(photoPickerIntent, 1); 

這將選擇在所有儲存的圖像。

1

只是對Reto給出的答案的更新。你可以這樣做縮放圖像:

private String getPath(Uri uri) { 
String[] data = { MediaStore.Images.Media.DATA }; 
CursorLoader loader = new CursorLoader(context, uri, data, null, null, null); 
Cursor cursor = loader.loadInBackground(); 
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
cursor.moveToFirst(); 
return cursor.getString(column_index); 
}