Ich möchte eine Bildauswahl aus der Galerie erstellen. Ich benutze Code
intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, TFRequestCodes.GALLERY);
Mein Problem ist, dass bei dieser Aktivität auch Videodateien angezeigt werden. Gibt es eine Möglichkeit, angezeigte Dateien zu filtern, sodass bei dieser Aktivität keine Videodateien angezeigt werden?
Vergessen Sie nicht, auch die Konstante zu erstellen PICK_IMAGEdamit Sie erkennen können, wann der Benutzer von der Bildergalerie-Aktivität zurückkommt:
public static final int PICK_IMAGE = 1;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == PICK_IMAGE) {
//TODO: action
}
}
So nenne ich die Bildergalerie. Setzen Sie es ein und sehen Sie, ob es für Sie funktioniert.
BEARBEITEN:
Dadurch wird die Dokumente-App aufgerufen. Um dem Benutzer zu erlauben, auch alle Galerie-Apps zu verwenden, die er möglicherweise installiert hat:
Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT);
getIntent.setType("image/*");
Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
pickIntent.setType("image/*");
Intent chooserIntent = Intent.createChooser(getIntent, "Select Image");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {pickIntent});
startActivityForResult(chooserIntent, PICK_IMAGE);
Ich bekomme 2 Optionen auf diesem “Android-System”, “Dokumente”. Wenn ich Android-System auswähle, werden mir Galerie und Fotos angezeigt. Wie werde ich diese Zwischenoptionsliste los?
– Udayaditya Barua
11. Dezember 2015 um 7:54 Uhr
@Uday es liegt einfach daran, dass Sie die Standardeinstellung nicht festgelegt haben. Lass es einfach 🙂
– Tristan Wiley
8. Januar 2016 um 22:31 Uhr
Auf was muss die Konstante PICK_IMAGE gesetzt werden? Es heißt “Symbol “PICK_IMAGE” kann nicht aufgelöst werden.”
– Michael
20. August 2016 um 18:15 Uhr
@Michael der PICK_IMAGE konstant hält jede statisch int Wert, den Sie auf genau dieser Klasse festgelegt haben, dieser wird auf der weiterverwendet @Override Funktion onActivityResult(int requestCode, resultCode, Intent data)wobei empfohlen wird, diese Konstante zu verwenden, um die requestCode Parameter, bevor Sie eine Aktion ausführen 🙂
– Gabcvit
14. September 2017 um 14:06 Uhr
Sie können die Bitmap aus der Methode onActivityResult(…) mit dem folgenden Code abrufen (Ergebnis_OK vorausgesetzt): Bitmap bitmap = data.getExtras().getParcelable(“data”);
– Shn_Android_Dev
1. März 2018 um 21:58 Uhr
Benjamin
Manchmal können Sie keine Datei von dem Bild erhalten, das Sie auswählen. Das liegt daran, dass der Ausgewählte von Google+, Drive, Dropbox oder einem anderen Anbieter stammt.
Die beste Lösung besteht darin, das System zu bitten, einen Inhalt über auszuwählen Absicht.ACTION_GET_CONTENT und erhalten Sie das Ergebnis mit einem Inhaltsanbieter.
Sie können dem folgenden Code folgen oder sich meine ansehen aktualisierter Kern.
public void pickImage() {
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, PICK_PHOTO_FOR_AVATAR);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_PHOTO_FOR_AVATAR && resultCode == Activity.RESULT_OK) {
if (data == null) {
//Display an error
return;
}
InputStream inputStream = context.getContentResolver().openInputStream(data.getData());
//Now you can do whatever you want with your inpustream, save it as file, upload to a server, decode a bitmap...
}
}
if(resultCode == Activity.RESULT_OK) {...} kann verwendet werden, um Erfolg zu erkennen/abzubrechen
– Thamme Gowda
4. Februar 2014 um 13:57 Uhr
Wie bekommt man den Pfad?
– Benutzer3402040
9. Oktober 2015 um 10:27 Uhr
@delive, ich denke, du könntest es versuchen new File(data.getData()).getAbsolutePath() Nur eine Vermutung, ich habe es nicht probiert
– Irgendwer irgendwo
17. Dezember 2015 um 15:14 Uhr
FileNotFound-Ausnahmewarnung von Android Studio im Fragment in getActivity().getContentResolver().openInputStream(data.getData());.
– Iqbal
27. Januar 2016 um 11:02 Uhr
Dies funktioniert auf bestimmten Geräten, bei denen der Pfad der Datei nicht zurückgegeben wird. Ich sehe jedoch keine Möglichkeit zu bestimmen – sobald ich den InputStream habe – wie ich die Ausrichtung des Bildes herausfinden kann.
– Casey Perkins
9. Februar 2017 um 19:08 Uhr
public void FromCamera() {
Log.i("camera", "startCameraActivity()");
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, 1);
}
public void FromCard() {
Intent i = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, 2);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2 && resultCode == RESULT_OK
&& null != data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();
bitmap = BitmapFactory.decodeFile(picturePath);
image.setImageBitmap(bitmap);
if (bitmap != null) {
ImageView rotate = (ImageView) findViewById(R.id.rotate);
}
} else {
Log.i("SonaSys", "resultCode: " + resultCode);
switch (resultCode) {
case 0:
Log.i("SonaSys", "User cancelled");
break;
case -1:
onPhotoTaken();
break;
}
}
}
protected void onPhotoTaken() {
// Log message
Log.i("SonaSys", "onPhotoTaken");
taken = true;
imgCapFlag = true;
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
bitmap = BitmapFactory.decodeFile(path, options);
image.setImageBitmap(bitmap);
}
Danke sehr. Diese Antwort hat mir geholfen, das Bild später hochzuladen
– Rosário Pereira Fernandes
21. August 2017 um 1:25 Uhr
Ich vermute, Sie meinen Fall 1: statt Fall -1: im Schalter im OnActivityResult.
– Matthias
26. November 2017 um 9:21 Uhr
Ich weiß, es ist eine Newibe-Frage, aber warum haben wir das alles getan, um den Bildpfad zu erhalten, was gibt data.getData dann zurück?
– moumenShobakey
5. Februar 2020 um 9:12 Uhr
was ist der Wert von path? in File file = new File(path);
– Ravi Wanija
3. März 2020 um 10:05 Uhr
Sie können diese Methode verwenden, um ein Bild aus der Galerie auszuwählen. Es werden nur Bilder angezeigt.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) {
return;
}
if (requestCode == 1) {
final Bundle extras = data.getExtras();
if (extras != null) {
//Get image
Bitmap newProfilePic = extras.getParcelable("data");
}
}
}
Linh
Hier ist ein vollständiges Beispiel für die Anforderung einer Erlaubnis (falls erforderlich), das Bild aus der Galerie auswählen und dann das Bild konvertieren in bitmap oder file
Dies ist nichts weniger als eine Bibliothek, insbesondere mit dieser Funktion zum Zuschneiden und Seitenverhältnis. Ich wusste nie, dass so etwas existiert. Vielen Dank, mein Herr.
– Lalit Fauzdar
9. Mai 2020 um 14:43 Uhr
Hier hinten ist es nicht so gut, wie ich nach den ersten Eindrücken gehofft hatte. Es wählt das Bild nicht aus, wenn es mit Snapseed bearbeitet wird, kein Absturz, aber kein Bild, die Standard-Galerie-App von Huawei macht nichts, wenn ich nach der Bearbeitung auf Weiter klicke, es bearbeitet kein Bild, wenn es aus Google-Fotos ausgewählt wird, bring es zurück ohne es direkt. Es funktioniert nur gut, wenn ich die Standardgalerie von Huawei und Google Fotos wähle, um sie zu bearbeiten.
– Lalit Fauzdar
9. Mai 2020 um 16:14 Uhr
Danke. Sehr gute Antwort und funktioniert beim ersten Mal sehr gut.
– sagar.android
25. Mai 2021 um 13:05 Uhr
abolfazl bazghandi
Ich habe das gleiche Problem. Ich benutze diese Codes
Dies ist nichts weniger als eine Bibliothek, insbesondere mit dieser Funktion zum Zuschneiden und Seitenverhältnis. Ich wusste nie, dass so etwas existiert. Vielen Dank, mein Herr.
– Lalit Fauzdar
9. Mai 2020 um 14:43 Uhr
Hier hinten ist es nicht so gut, wie ich nach den ersten Eindrücken gehofft hatte. Es wählt das Bild nicht aus, wenn es mit Snapseed bearbeitet wird, kein Absturz, aber kein Bild, die Standard-Galerie-App von Huawei macht nichts, wenn ich nach der Bearbeitung auf Weiter klicke, es bearbeitet kein Bild, wenn es aus Google-Fotos ausgewählt wird, bring es zurück ohne es direkt. Es funktioniert nur gut, wenn ich die Standardgalerie von Huawei und Google Fotos wähle, um sie zu bearbeiten.
– Lalit Fauzdar
9. Mai 2020 um 16:14 Uhr
Danke. Sehr gute Antwort und funktioniert beim ersten Mal sehr gut.
– sagar.android
25. Mai 2021 um 13:05 Uhr
franklot
2021 Kotlin-Lösung mit neuer Version von Fragment:
Dieser Artikel beschreibt schön, wie man Bilder aus der Galerie auswählt: androidbitmaps.blogspot.com/2015/04/…
– Andy Res
17. April 2015 um 5:13 Uhr
Es gibt eine ähnliche Frage wie Sie. stackoverflow.com/a/31382240/1835650
– Teetracker
13. Juli 2015 um 11:39 Uhr