Anstatt den Benutzer eine Liste der Widget-Anbieter anzuzeigen, lassen Sie ihn wählen und konfigurieren Sie das Widget, ich manuell laden alle Widget-Anbieter und lassen Sie den Benutzer Drag-and-Drop diese Widgets in meiner App. Sobald der Benutzer ein solches Symbol löscht, möchte ich dieses Widget erstellen und konfigurieren. Wie mache ich das?Erstellen Widget mit bekannten AppWidgetProviderInfo
Code mit Kommentaren
// 1) get a list of all app widget providers
List<AppWidgetProviderInfo> providers = mAppWidgetManager.getInstalledProviders();
// 2) Display the list to the user and let him select a widget provider => done via custom UI
// 3) handle the user selected widget and create it
// 3.1) create new widget id
int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
// 3.2) configure widget
// ??? How do I do this now? appWidgetInfo.configure = null, so I can't use this as I normally would do it
// 4) Save the appWidgetId or delete it again depending on if the user finished the setup or cancelled it
Normale Annäherung (nicht wichtig für meinen Anwendungsfall, sondern beschreibt allgemein, wie es funktioniert)
- eine Widget-ID erstellen und verwenden Sie dann die
AppWidgetManager.ACTION_APPWIDGET_PICK
Absicht, den Benutzer ein Widget wählen - nach der Auswahl, übergeben Sie die Daten an die
AppWidgetManager.ACTION_APPWIDGET_CONFIGURE
Vorsatz undintent.setComponent(appWidgetInfo.configure);
- nach dem Setup verwenden, um die Widget-ID speichern (oder löschen, wenn der Benutzer das Setup abgebrochen) in meinen benutzerdefinierten Daten und verwenden Sie die ID das Widgets
- => Für meinen Fall zu zeigen und zu aktualisieren, ist dies Feinwerk ...
Frage
Wie erhalte ich eine gültige AppWidgetProviderInfo
mit einem configure Feld = null, so dass ich folgende verwenden:
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
// appWidgetInfo.configure is null for appWidgetInfo received from mAppWidgetManager.getInstalledProviders()
// it is not if the appWidgetInfo is received via the AppWidgetManager.ACTION_APPWIDGET_PICK intent...
intent.setComponent(appWidgetInfo.configure);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
activity.startActivityForResult(intent, WIDGET_CONFIGURE_REQUEST_CODE);
Oder gibt es einen alternativen Ansatz dazu?
Ich glaube, ich irgendwie ein Widget mit den AppWidgetProviderInfo
manuell erstellen muß und rege dann die Informationen mit mAppWidgetManager.getAppWidgetInfo(appWidgetId);
und dann werde ich ein gefülltes configure
Feld habe, da dies, wenn ich AppWidgetManager.ACTION_APPWIDGET_PICK
Absicht verwenden scheint zu passieren, aber ich weiß nicht, dass ich tun Sie dies manuell ...