2009-11-08 13 views
52

Czy istnieje sposób korzystania z intent.setType() i dostarczania wielu szerokich typów (jak obrazy i wideo)?Wiele typów MIME w systemie Android

Używam ACTION_GET_CONTENT. Wydaje się pracować z typami oddzielonymi przecinkami.

+1

Mógłbyś być bardziej konkretny. setType() w ... co? Do jakiego celu i celu? Itd. – CommonsWare

+0

Czy znalazłeś sposób, aby to jeszcze zrobić? –

Odpowiedz

4

Niestety, nie jest to obecnie obsługiwane. Masz dwie opcje:

(1) Użyj typu MIME */* i zaakceptuj, że mogą istnieć pewne rzeczy, które użytkownik może wybrać, z którymi nie będziesz w stanie sobie poradzić (i ma przyzwoitą ścieżkę odzyskiwania); lub

(2) Zaimplementuj własny selektor działań, wykonując bezpośrednie wywołania menedżera pakietów, aby uzyskać czynności, które mogą obsłużyć oba typy MIME, scalając te listy i wyświetlając je użytkownikowi.

Ponadto, setType() w ogóle nie działa z typami oddzielonymi przecinkami. Musi to być jeden i tylko jeden typ MIME.

+3

W rzeczywistości obsługiwanych jest wiele typów MIME. Czy próbowałeś tego? Na przykład: image/*, video/* wyświetli zdjęcia i filmy ... – vchelbanster

19

W rzeczywistości obsługiwanych jest wiele typów MIME. Czy próbowałeś tego?

Na przykład: intent.setType("image/*,video/*") będą wyświetlane zdjęcia i filmy ...

Dla mnie to działa. To powinno również zadziałać ...

+3

To rozwiązanie działa ... ale tylko z aplikacjami, które pozwalają na dwa typy MIME. Domyślna "Galeria" nie jest. – Corbella

+0

W rzeczywistości zależy to od zainstalowanej aplikacji "Galeria". Istnieją różne wersje ich dystrybucji z różnymi Android ROM. – vchelbanster

+0

Działa tylko w niewielkich przypadkach. Te same obrazy mogą lub nie mogą być wybierane. Android 5.0.1 – Ingweland

0

za moją pracę ze średnikami.

Przykład:

intent.setType("image/*;video/*") 

lub

sIntent.putExtra("CONTENT_TYPE", "image/*;video/*"); 
61

W Androidzie 4.4 przy użyciu Storage Access Framework można użyć EXTRA_MIME_TYPES przekazać wiele typów MIME.

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); 
+0

Ten jest doskonały. –

+3

To nie działa w systemie Android 7.0. Pokazuje tylko filmy. – clocksmith

+0

@clocksmith Wydaje się działać dobrze na moim Nexusie 9 z Androidem 7.0. –

2

możesz przekazywać wiele typów mime, jeśli rozdzielisz z |

Intent.setType("application/*|text/*"); 
0

Dla mnie to, co najlepiej działało było:

intent.setType("*/*"); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 


Można dodać kilka typów MIME jak ten

intent.setType("image/*|application/pdf|audio/*"); 

Ale intencją do wyboru tylko aplikacje wyświetlane, może obsługiwać obrazy, ponieważ jest pierwszym ciągiem typu mime.

Jeśli jednak masz zainstalowany menedżer plików (testowałem przy użyciu menedżera plików CyanogenMod), możesz wybrać plik audio lub pdf lub obraz.

Jeśli dźwięk typ MIME jest pierwszym, tak:

intent.setType("audio/*|image/*|application/pdf"); 

Intencją logowania będzie wyświetlane tylko aplikacje, które obsługują dźwięk.
Ponownie korzystając z menedżera plików, możesz wybrać obraz, plik PDF lub plik audio.

Powiązane problemy