2012-01-31 3 views
13

Sto cercando di ottenere l'elenco di tutte le app installate su un telefono in grado di gestire l'intento SEND. Attualmente sto gestendo questa situazione utilizzando Intent.createChooser ma questo non è quello che sto cercando di ottenere come vorrei poter accedere all'elenco delle app per visualizzarle in una vista nella mia attività, in un modo simile a come l'app Android Stock Gallery li visualizza e NON in una finestra di selezione.Ottieni l'elenco di app in grado di gestire l'intento SEND da visualizzare in una finestra di dialogo (non una finestra popup)

Screenshot disponibile qui: http://i.stack.imgur.com/0dQmo.jpg

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

18

chiamata queryIntentActivities() su PackageManager, dato un ACTION_SENDIntent configurato come si usa con createChooser() (vale a dire, ha il tipo MIME, Uri, etc.). Questo ti darà una lista di tutte le partite che appariranno nel selettore. È quindi possibile utilizzare la selezione dell'utente per avviare l'attività effettiva.

Here is a sample project che lo utilizza per creare un programma di avvio in stile schermata.

+0

Grazie accoppiano questo sta lavorando molto;) – Pierre

+1

@CommonsWare c'è un modo per ottenere un'azione specifica (nel mio caso ACTION_SEND) da un'applicazione e fare qualcosa di simile putExtra ("myMessage", shareMessage); in modo che l'Azione Condividi venga popolata con il mio shareMessage. Potrei realizzare fino a ottenere l'applicazione che può gestire ACTION_SEND. Grazie –

+0

@ Archie.bpgc: per quanto riguarda gli extra, consultare la documentazione di "ACTION_SEND" per ciò che è disponibile e * possibilmente * supportato. Ogni app con un'attività che può rispondere a "ACTION_SEND" ha la sua scelta se supportare o meno un dato extra. E poiché le applicazioni non hanno azioni - le attività lo fanno - non capisco la prima parte del tuo commento. – CommonsWare

5
List<String> packages = new ArrayList<>(); 

Intent sendIntent = new Intent(); 
sendIntent.setAction(Intent.ACTION_SEND); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "test"); 
sendIntent.setType("text/plain"); 
List<ResolveInfo> resolveInfoList = getPackageManager() 
    .queryIntentActivities(sendIntent, 0); 

for (ResolveInfo resolveInfo : resolveInfoList) { 
    packages.add(resolveInfo.activityInfo.packageName); 
}