2009-02-15 7 views
41

Genau wie das iPhone hat einen UIImagePickerController, um den Benutzer Zugriff auf Bilder auf dem Gerät gespeichert haben, haben wir eine ähnliche Kontrolle im Android SDK?Greifen Sie auf Bilder von Bilder App in meiner Android-App

Danke.

+1

Ich glaube, was Sie nach einem Content-Provider android.provider und eine Klasse namens MediaStore.Images [Weitere Informationen finden Sie hier.] Genannt ist (http://developer.android.com/reference/android/provider/package-summary.html) – GregD

Antwort

83

Sie können startActivityForResult verwenden und einen Intent übergeben, der eine Aktion beschreibt, die abgeschlossen werden soll, und Datenquelle, auf der die Aktion ausgeführt werden soll.

Zum Glück für Sie, enthält Android eine Aktion für die Kommissionierung Dinge: Intent.ACTION__PICK und eine Datenquelle mit Bildern: android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI für Bilder auf dem lokalen Gerät oder android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI für Bilder auf der SD-Karte.

Anruf startActivityForResult Gang in der Auswahlaktion und die aufgenommenen Bilder der Benutzer aus, so wählen wollen:

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

Dann onActivityResult außer Kraft für den Benutzer zu hören eine Auswahl getroffen zu haben.

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

Sobald Sie das Bild Uri haben, können Sie es verwenden, um auf das Bild zuzugreifen und tun, was auch immer Sie damit tun müssen.

+0

Mein onactivityresult wird nicht aufgerufen, wenn Sie diesen ... irgendeinen Vorschlag verwenden? Ich setze externe Speicherberechtigung –

+0

Um zu sehen, wie genau Sie den Dateipfad von der Variable selectedImage abrufen, überprüfen Sie diese Antwort: http://StackOverflow.com/a/10474167 – Tiago

22

Sie können auch tun:

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

Diese Bilder in allen Speicher abholt.

+0

Ist es möglich, die Kamera als zusätzliche Quelle angezeigt werden Hier? – jjxtra

+0

Wenn Sie die statische 1 an startActivityForResult übergeben, wie identifizieren Sie den Anforderungscode innerhalb der onActivityResult()? –

1

Nur ein Update auf die Antwort von Reto. Sie können dies tun, um das Bild zu skalieren:

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); 
}