2009-02-15 10 views
41

Tak jak iPhone ma kontroler UIImagePickerController, aby umożliwić użytkownikowi dostęp do zdjęć zapisanych na urządzeniu, czy mamy podobne sterowanie w zestawie SDK systemu Android?Dostęp do zdjęć z aplikacji Obrazy w mojej aplikacji na Androida

Dzięki.

+1

wierzę co jesteś po to dostawca treści nazywane android.provider i klasę o nazwie MediaStore.Images [Więcej informacji można znaleźć tutaj.] (http://developer.android.com/reference/android/provider/package-summary.html) – GregD

Odpowiedz

83

Możesz użyć startActivityForResult, przekazując intencję opisującą czynność, którą chcesz wykonać, oraz źródło danych w celu wykonania akcji.

Na szczęście dla ciebie, Android obejmuje działania do podnoszenia rzeczy: Intent.ACTION__PICK i źródło danych zawierające zdjęcia: android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI dla obrazów na urządzeniu lokalnym lub android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI dla obrazów na karcie SD.

połączeń startActivityForResult mijania w akcji pick a obrazy, które chcesz użytkownikowi wybrać z tak:

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

następnie zastąpić onActivityResult słuchać dla użytkownika po dokonaniu wyboru.

@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 
    } 
} 

Po uzyskaniu obrazu Uri można go użyć, aby uzyskać dostęp do obrazu i zrobić, co trzeba z nim zrobić.

+0

Moja funkcja onactivity nie jest wywoływana podczas używania tej ... jakiejkolwiek sugestii? Ustawiono zewnętrzne pozwolenie na przechowywanie –

+0

Aby zobaczyć, jak dokładnie pobierasz ścieżkę pliku ze zmiennej selectedImage, sprawdź tę odpowiedź: http://stackoverflow.com/a/10474167 – Tiago

22

Można również zrobić:

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

ta wzrośnie obrazów we wszystkich magazynach.

+0

Czy możliwe jest sprawienie, aby kamera była wyświetlana jako dodatkowe źródło tutaj? – jjxtra

+0

jeśli przekazujesz statyczny 1 do startActivityForResult, w jaki sposób identyfikujesz kod żądania w onActivityResult()? –

1

Po prostu aktualizacja odpowiedzi udzielonej przez Reto. Można to zrobić na skalowanie obrazu:

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); 
} 
Powiązane problemy