Gibt es eine Möglichkeit, intent.setType()
mehrere breite Typen (wie Bilder und Videos) zu verwenden und bereitzustellen ?
Ich benutze eine ACTION_GET_CONTENT
. Es scheint nur mit durch Kommas getrennten Typen zu funktionieren.
Gibt es eine Möglichkeit, intent.setType()
mehrere breite Typen (wie Bilder und Videos) zu verwenden und bereitzustellen ?
Ich benutze eine ACTION_GET_CONTENT
. Es scheint nur mit durch Kommas getrennten Typen zu funktionieren.
Antworten:
In Android 4.4 können Sie bei Verwendung des Storage Access Frameworks das verwenden EXTRA_MIME_TYPES
, um mehrere MIME-Typen zu übergeben.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
String[] mimetypes = {"image/*", "video/*"};
intent.putExtra(Intent.EXTRA_MIME_TYPES, mimetypes);
startActivityForResult(intent, REQUEST_CODE_OPEN);
EXTRA_MIME_TYPES
nicht ersetzt setType
. Sie brauchen setType
mit diesem Ansatz noch.
Tatsächlich werden mehrere MIME-Typen unterstützt. Hast du es überhaupt versucht ???
Zum Beispiel: intent.setType("image/*,video/*")
Zeigt Fotos und Videos an ...
Bei mir funktioniert es. Es sollte auch für Sie funktionieren ...
[BEARBEITEN]: Dies funktioniert teilweise, da nicht alle Galerie-Apps die Unterstützung für Filter mit mehreren MIME-Typen implementieren.
Für mich funktionierte am besten:
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
Sie können mehrere MIME-Typen wie diesen hinzufügen
intent.setType("image/*|application/pdf|audio/*");
Die Absichtsauswahl zeigt jedoch nur Anwendungen an, die Bilder verarbeiten können, da dies die erste in der Zeichenfolge des MIME-Typs ist.
Wenn Sie jedoch einen Dateimanager installiert haben (ich habe ihn mit dem CyanogenMod-Dateimanager getestet), können Sie eine Datei auswählen, die Audio oder PDF oder ein Bild ist.
Wenn der Audio-Mime-Typ der erste ist, wie folgt:
intent.setType("audio/*|image/*|application/pdf");
Die Absichtsauswahl zeigt nur Anwendungen an, die Audio verarbeiten.
Mit dem Dateimanager können Sie wieder ein Bild, ein PDF oder ein Audio auswählen.
Dies wird derzeit leider nicht unterstützt. Sie haben zwei Möglichkeiten:
(1) Verwenden Sie einen MIME-Typ von */*
und akzeptieren Sie, dass der Benutzer möglicherweise einige Dinge auswählen kann, die Sie nicht verarbeiten können (und dafür einen angemessenen Wiederherstellungspfad haben). oder
(2) Implementieren Sie Ihre eigene Aktivitätsauswahl, indem Sie den Paketmanager direkt aufrufen, um die Aktivitäten abzurufen, die beide MIME-Typen für die Absicht verarbeiten können, diese Listen zusammenzuführen und dem Benutzer anzuzeigen.
Funktioniert auch setType()
überhaupt nicht durch durch Kommas getrennte Typen. Es muss ein und nur ein MIME-Typ sein.
für meine Arbeit mit Semikolons.
Beispiel:
intent.setType("image/*;video/*")
oder
sIntent.putExtra("CONTENT_TYPE", "image/*;video/*");
Intent.EXTRA_MIME_TYPES
Konstante verwenden. Anstelle von Semikolons können Sie auch ein Array von Zeichenfolgen übergeben.