2011-01-29 11 views
6

Mi scuso se questo è già stato risolto - se qualcuno mi può indirizzare a una domanda già risposta, sarebbe bello ...In Android, come posso visualizzare un selettore di applicazioni in base al tipo di file?

Molto semplicemente, mi piacerebbe essere in grado di far apparire una lista di applicazioni che può elaborare un file di un determinato tipo - ad esempio, se ho un file musicale (mp3, ogg, qualunque cosa), mi piacerebbe poter visualizzare un elenco di tutte le applicazioni multimediali caricate in grado di elaborare il file e consentire al utente per selezionarne uno.

Ho giocato in giro con la creazione di un intento di fare in questo modo:

Intent myIntent = new Intent(); 
myIntent.setAction(Intent.ACTION_VIEW); 
myIntent.addCategory("android.intent.category.LAUNCHER"); 
myIntent.setType("mp3"); 
startActivity(myIntent); 

ma ho ovviamente ottenuto sbagliato, dal momento che si blocca ogni volta. Devo utilizzare ACTION_PICK o ACTION_CHOOSER anziché ACTION_VIEW?

Ancora più importante, è possibile definire facilmente tutti i lettori multimediali con qualcosa di diverso da Intent.type? Credo che tipo dovrebbe essere un tipo MIME corretto, in minuscolo, ma non sono sicuro di cosa usare in questo caso ...

Si prega di essere gentile :)

+0

Pinging questo per vedere se qualcuno ha una risposta (anche una risposta parziale) ... – roryhewitt

+0

Ho avuto un problema simile. Ho usato la seguente soluzione per ottenere un selettore di applicazioni: http://stackoverflow.com/questions/7635764/application-selection-dialog-based-on-filetype Questa soluzione elimina anche la necessità di creare la tua finestra di dialogo. – kaspermoerch

risposta

8

Per ottenere le applicazioni che possono aprire correttamente un determinato intento, si utilizzerà il PackageManager. Costruisci semplicemente l'intento come sopra e poi usa questo codice per ottenere le applicazioni in grado di gestire l'intento.

Intent myIntent = new Intent(); 
myIntent.setAction(Intent.ACTION_VIEW); 
myIntent.addCategory("android.intent.category.LAUNCHER"); 
myIntent.setType("mp3");  

PackageManager manager = getPackageManager(); 
List<ResolveInfo> info = manager.queryIntentActivities(
    myIntent, PackageManager.MATCH_DEFAULT_ONLY); 

Questo vi darà tutte le informazioni sui programmi che possono gestire l'intento, tra cui icona e nome pacchetto. È quindi possibile creare una finestra di dialogo con queste opzioni e salvare l'opzione scelta dall'utente.

+0

Con "l'intento come sopra", intendi il codice di @ sstn? In questo caso, intendi utilizzare il codice del gestore pacchetti ** invece ** di startActivity()? – roryhewitt

+0

a destra. Allora questo ti darà tutte le informazioni che ti servono. Lasciami pulire un po 'il codice. –

+0

Sembra fantastico! Non credo che tu abbia un codice per una finestra di dialogo appropriata in giro, vero? O semplicemente creo il mio 'standard'? – roryhewitt

1

Presumo che si desidera vedere questo selettore dialogo se apri un file (o URL) e c'è più di un'applicazione registrata per gestirlo? Per esempio. apri un URL di youtube e puoi scegliere di utilizzare il player o il browser di YouTube?

Questo è il tipo di intenti il ​​sistema invia quando voglio aprire un'immagine (tramite il browser di file):

File f = new File("/sdcard/IMG_0114.JPG"); 
Uri uri = Uri.fromFile(f); 

Intent i = new Intent(Intent.ACTION_VIEW); 
// use setDataAndType() - setData() and setType() cancel each other 
i.setDataAndType(uri, "image/jpeg"); 
i.putExtra("preview", false); 
i.putExtra("key_filename", "/sdcard/IMG_0114.JPG"); 
i.putExtra(Intent.EXTRA_STREAM, uri); 
i.putExtra("sort_order", 0); 

// It's one of the flag combinations: 
i.setFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); 

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
     Intent.FLAG_ACTIVITY_SINGLE_TOP | 
     Intent.FLAG_ACTIVITY_MULTIPLE_TASK | 
     Intent.FLAG_DEBUG_LOG_RESOLUTION); 

startActivity(i); 

EDIT: corretto codice per ottenere una soluzione di lavoro (minimo).

Non sono sicuro quali campi dei dati aggiuntivi debbano essere impostati - non ha trovato la documentazione per questo.

+0

hai ragione che voglio vedere la finestra di dialogo di scelta. Tuttavia, in realtà non voglio aprire il file (anzi, in realtà non ho intenzione di avere un file specifico) - Voglio essere in grado di restituire il metodo che sarebbe stato usato per aprire quel file. – roryhewitt

+0

Fondamentalmente, voglio far apparire un selettore per un file ** tipo ** e quindi essere in grado di salvare (nella mia applicazione) il nome dell'applicazione scelta. Ha senso? – roryhewitt

Problemi correlati