@ Waza_Be ha ragione quando guarda la lista "AppWidgetIds" per sapere t Il numero di widget attivi (quelli installati sul tuo homescreen) è il modo corretto per conoscere queste informazioni.
Tuttavia, tieni presente che NON DEVI DOVEREI guardare da solo.
Controllare la documentazione ufficiale di Android per le migliori pratiche sui widget: https://developer.android.com/guide/topics/appwidgets/index.html#AppWidgetProvider
L'approccio giusto è quello di sovrascrivere solo il metodo onUpdate() e scorrere l'elenco dei widget "attivi":
public class ExampleAppWidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
// Create an Intent to launch ExampleActivity
Intent intent = new Intent(context, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// Get the layout for the App Widget and attach an on-click listener
// to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
views.setOnClickPendingIntent(R.id.button, pendingIntent);
// Tell the AppWidgetManager to perform an update on the current app widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}
E poiché il proprio fornitore di widget sovrascrive AppWidgetProvider, NON si andrà nel metodo onUpdate() se non ci sono widget attivi nella schermata iniziale!
vedere il codice OnReceive() di Android AppWidgetProvider che controlla già per te, che "appWidgetIds.length> 0":
public void onReceive(Context context, Intent intent) {
// Protect against rogue update broadcasts (not really a security issue,
// just filter bad broacasts out so subclasses are less likely to crash).
String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
Bundle extras = intent.getExtras();
if (extras != null) {
int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
if (appWidgetIds != null && appWidgetIds.length > 0) {
this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
}
}
}
(...)
}
fonte
2015-09-04 12:51:12
Ciao, hai fatto dato un'occhiata alla mia risposta? Penso che potrebbe aiutare .. ;-) –