2010-11-25 10 views
7

Ich versuche, die verfügbaren Startbildschirm Widgets Liste auf Android zu lesen. ich ein Raster mit Hilfe der verfügbaren Anwendungen Liste bevölkern könnenWie erhalte ich die installierte Widgetliste?

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

und als Iterieren durch jede ResolveInfo verwenden.
Wie kann ich das gleiche mit verfügbaren Startbildschirm Widgets tun? Ich möchte ein Raster mit der gleichen Liste füllen, die angezeigt wird, berühren Sie den Bildschirm und wählen Sie "Widget" aus dem erscheinenden Popup.

Antwort

6

Rufen Sie getInstalledProviders() auf einem AppWidgetManager.

+0

Vielen Dank! Das mach es! – lorenzoff

+0

Das wird manchmal android.os.TransactionTooLargeException werfen. Ich kann nicht herausfinden, warum ... –

+1

@Bobbobbington: Das würde passieren, wenn es viele 'AppWidgetProviders' auf dem Gerät gibt. Es gibt eine Begrenzung von 1 MB für alle gleichzeitigen IPC-Operationen von Ihrem Prozess. Wenn das Ergebnis von 'getInstalledProviders()' über 1 MB liegt, erhalten Sie diese Ausnahme. Selbst wenn die 'getInstalledProviders()' -Liste kleiner ist, wenn Sie sie aufrufen, während ein anderer IPC in Ihrem Prozess läuft (und einen Teil des 1MB-Limits verbraucht), erhalten Sie diese Ausnahme. – CommonsWare

9

Wie CommonsWare vorgeschlagen, hier ist der Arbeitscode für

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); 
} 

Verschiedene andere Werte Liste von Widgets

Extraktion extrahiert werden kann, um weitere Referenz siehe AppWidgetProviderInfo

+0

Ist es möglich, das Symbol des zugehörigen Widget damit zu bekommen? –

+0

@RandyFreak Ja, wir können das Icon daraus extrahieren –

Verwandte Themen