Greifen Sie auf Bilder von Bildern app in meiner android app
-
23-08-2019 - |
Frage
Genau wie das iPhone einen UIImagePickerController hat der Benutzer Zugriff Bilder auf dem Gerät gespeichert zu lassen, haben wir eine ähnliche Kontrolle im Android SDK haben?
Danke.
Lösung
Sie können usestartActivityForResult
, in einer Intent vorbei, die eine Aktion beschreibt, die Sie abgeschlossen werden sollen und und Datenquelle auf die Aktion auszuführen.
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.
Anrufweitergabe startActivityForResult
in der Aufnahmeaktion und die Bilder möchten Sie den Benutzer aus, so wählen:
startActivityForResult(new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), SELECT_IMAGE);
Dann onActivityResult
außer Kraft setzen zu hören für den Benutzer 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
}
}
Wenn Sie das Bild Uri haben, können Sie es verwenden, um das Bild für den Zugriff auf und tun, was Sie brauchen, damit zu tun.
Andere Tipps
Sie können auch tun:
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 1);
Dies wird Bilder in allen Speichern wählen.
Nur ein Update auf die Antwort von Reto gegeben. 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);
}