2010-11-25 41 views
7

J'essaye de lire la liste de widgets d'écran d'accueil disponible sur Android. Je peux remplir une grille en utilisant la liste des applications disponibles à l'aideComment obtenir la liste des widgets installés?

Intent myIntent = new Intent(Intent.ACTION_MAIN, null); 
myIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
List<ResolveInfo> appsInfo = MyActivity.getPackageManager().queryIntentActivities(myIntent, 0); 

et que itérer chaque ResolveInfo.
Comment faire la même chose avec les widgets d'écran d'accueil disponibles? Je voudrais remplir une grille avec la même liste qui apparaît en continuant à toucher l'écran et en choisissant 'widget' dans le popup apparaissant.

Répondre

6

Appelez getInstalledProviders() sur un AppWidgetManager.

+0

Merci beaucoup! Ça fait ça! – lorenzoff

+0

Cela lancera parfois android.os.TransactionTooLargeException. Je ne peux pas comprendre pourquoi ... –

+1

@Bobbobbington: Cela se produirait s'il y avait beaucoup de «AppWidgetProviders» sur l'appareil. Il y a une limite de 1 Mo pour toutes les opérations IPC simultanées de votre processus, donc si le résultat de getInstalledProviders() est supérieur à 1 Mo, vous obtiendrez cette exception. Même si la liste 'getInstalledProviders()' est plus petite, s'il vous arrive de l'appeler alors qu'un autre IPC de votre processus est en cours (et qu'il consomme une partie de la limite de 1 Mo), vous obtiendrez cette exception. – CommonsWare

9

Comme le suggère CommonsWare, voici le code de travail pour extraire la liste des widgets

AppWidgetManager manager = AppWidgetManager.getInstance(this); 
List<AppWidgetProviderInfo> infoList = manager.getInstalledProviders(); 
for (AppWidgetProviderInfo info : infoList) { 
    Log.d(TAG, "Name: " + info.label); 
    Log.d(TAG, "Provider Name: " + info.provider); 
    Log.d(TAG, "Configure Name: " + info.configure); 
} 

Diverses autres valeurs peuvent être extraites, pour plus référence voir AppWidgetProviderInfo

+0

Est-il possible d'obtenir l'icône du widget associé avec ceci? –

+0

@RandyFreak oui nous pouvons extraire l'icône de cette –