2013-01-03 13 views
8

W mojej aplikacji Android używam poniższego kodu do wylistowania plików mp3 do wyboru i przesłania.
Chcę wiedzieć, czy możliwe jest filtrowanie plików wraz z ich czasem trwania wraz z ich typem.Czy można filtrować z czasem trwania pliku .mp3 podczas korzystania z pliku Intent.createchooser?

Intent intent = new Intent(); 
intent.setType("audio/*");    
intent.setAction(Intent.ACTION_GET_CONTENT); 
try { 
    startActivityForResult(Intent.createChooser(intent, "Select your Audio"), Global.FILE_FROM_SD); 
} 
catch (android.content.ActivityNotFoundException ex) { 
    // Potentially direct the user to the Market with a Dialog 
    Toast.makeText(WizardStep1.this, 
      "Please install a File Manager.", 
      Toast.LENGTH_SHORT).show(); 
} 

Odpowiedz

2

Nie sądzę, a przynajmniej nie tak, jak zacząłeś.

Wierzę, że po utworzeniu selektora intencji i otwarciu innego menedżera plików, nie można kontrolować, jakie dane wyświetlić danego menedżera plików, np. Filtrowane według określonych kryteriów.

Rozwiązaniem, które tu widzę, jest stworzenie metody, która returns all audio files from sdcard w tablicy, a następnie użycie filtra do określenia rozszerzenia plików (. Mp3) w połączeniu z metodą, która jest gets the duration of a file.
Dodaj przefiltrowaną zawartość do nowej tablicy, a następnie zrób, co chcesz, za pomocą filtrowanych plików, na przykład wyświetl w trybie ListView i pozwól użytkownikowi wybrać te, które chce przesłać.

pseudokod będzie wyglądać następująco:

ArrayList<String> filteredFiles = new ArrayList<String>(); 

String[] audioFiles = getAllAudioFiles(); 
for (String file : audioFiles) { 
    if (file.endsWith(".mp3") && getDuration(file) >= DURATION_CONSTANT) { 
     filteredFiles.add(file); 
    } 
} 

następnie wyświetlić zawartość filteredFiles w ListView i zapewnić odpowiednią logikę wyboru/wysyłania pliku.

+0

Dziękuję Andy Res –

2

AFAIK, to nie jest możliwe. Odbiornik docelowy może obsłużyć typ MIME, taki jak audio/*

Celem typów MIME jest wyrażenie typu medium, jakiego oczekujesz/request/accept. Nie obsługuje żadnych atrybutów (AFAIK)

Nawet jeśli tak, nie sądzę, że więcej niż garstka aplikacji na Androida zechce wesprzeć go, aby spełnić swój scenariusz.

Będziesz mieć więcej szczęścia, przekazując określone "dodatkowe" dane aplikacji, używając Intent.putExtra (String name, Bundle value), jeśli znajdziesz aplikację, która obsługuje akceptowanie takich dodatkowych danych. Popularna aplikacja ES File Explorer nie obsługuje go, więc nie sądzę, że będzie działać dla większości użytkowników.

+0

Dziękuję, Madushan, również myślę w ten sposób, muszę potwierdzić. Jeszcze raz dziękuję za cenną odpowiedź –

Powiązane problemy