AppWidgetManager.getAppWidgetIds in activity returns an empty list

前端 未结 3 529
感动是毒
感动是毒 2021-02-06 08:34

I have an appwidget that I\'m trying to update from an activity.

To do that, I need the appwidget id.

I\'ve used AppWidgetManager.getAppWidgetIds bu

相关标签:
3条回答
  • 2021-02-06 09:12

    I'm working on something similar and here is the simplest way I got it to work.

    In your service class put this wherever you want to trigger a widget update:

    Intent brIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
    sendBroadcast(brIntent);
    

    This will cause the onReceive(Context context, Intent intent) method in your AppWidgetProvider class to be called. Then onRecieve can call code to update the widget. For a sample, here's what I used. I'm merely updating the text of the widget:

            //Sample output text
        String text = "My cat's name is wiggles.";
        //get an AppWidgetManager
        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        //getComponentName
        ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class);
        //get the IDs for all the instances of this widget
        int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
        //update all of the widgets
        for (int widgetId : allWidgetIds) {
            //get any views in this instance of the widget
            RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
            // Set the text
            remoteViews.setTextViewText(R.id.widgetField,  text);
            //update the widget with any change we just made
            appWidgetManager.updateAppWidget(widgetId, remoteViews);
        }
    
    0 讨论(0)
  • 2021-02-06 09:29

    You can access your widget without knowing id

    appWidgetManager.updateAppWidget(new ComponentName(this.getPackageName(),Widget.class.getName()), views);
    

    This let you access the widget without having to know the 'appWidgetID'. Then in activity:

    Intent intent = new Intent(this, Settings.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
    
    views.setOnClickPendingIntent(R.id.btnActivate, pendingIntent);
    
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
    appWidgetManager.updateAppWidget(new ComponentName(this.getPackageName(), Widget.class.getName()), views);
    finish();
    
    0 讨论(0)
  • 2021-02-06 09:31

    To get the app widget ID.. use this below code

    onReceive() method use this below code

    int appWidgetId = intent.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,
    AppWidgetManager.INVALID_APPWIDGET_ID);
    

    in onUpdate() you get the list of ids already as the parameter!

    If you want to update it from activity use this

     Intent intent = new Intent(this, [activityname].class);
        intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
        int ids[] = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), [activityname].class));
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
        sendBroadcast(intent);
    
    0 讨论(0)
提交回复
热议问题