AppWidgetManager.getAppWidgetIds в действии возвращает пустой список

У меня есть appwidget, который я пытаюсь обновить из активности.

Для этого мне нужен идентификатор appwidget.

Я использовал AppWidgetManager.getAppWidgetIds но всегда возвращает пустой список.

Я также использовал AppWidgetManager.getInstalledProviders чтобы убедиться, что мое ComponentName верное, но все же я получаю пустой список.

Я видел все другие вопросы об этом, но я не мог найти что-то, что сработало для меня.

Есть ли другой способ решить эту проблему? Или другой способ обновления виджета?

Мой код:

 ComponentName name = new ComponentName(packageName, boardcastReceiverClass); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); int[] ids = appWidgetManager.getAppWidgetIds(name); if (ids != null && ids.length > 0) { getApplicationContext().sendBroadcast(getUpdateIntent(ids[0])); } 

Благодарю.

ОБНОВЛЕНИЕ: Я должен отметить, что мой AppWidgetProvider находится в проекте библиотеки. Согласно ComponentName, которое я получаю с getInstalledProviders , я использовал имя пакета моего приложения и имя класса с именем пакета библиотеки.

Вы можете получить доступ к своему виджету без знания идентификатора

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

Это позволит вам получить доступ к виджету, не зная «appWidgetID». Затем в действии:

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

Чтобы получить идентификатор виджета приложения, используйте этот ниже код

Метод onReceive () использует этот ниже код

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

В onUpdate () вы получаете список идентификаторов уже как параметр!

Если вы хотите обновить его из активности, используйте это

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

Я работаю над чем-то подобным, и вот самый простой способ заставить его работать.

В своем классе обслуживания поставьте это везде, где вы хотите вызвать обновление виджета:

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

Это приведет к вызову метода onReceive (контекстный контекст, намерение) в классе AppWidgetProvider. Затем onRecieve может вызвать код для обновления виджета. Для образца, вот что я использовал. Я просто обновляю текст виджета:

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