Как получить идентификаторы виджета в слушателе onSharedPreferenceChanged - PullRequest
0 голосов
/ 15 октября 2019

У меня есть приложение ionic4 с виджетом, реализованным в Java. Виджет должен обновляться каждый раз, когда я изменяю общие настройки.

До сих пор я был в состоянии добавить OnSharedPreferenceChangeListener к основному действию и намерению вещания, которое вызывает onReceive в классе виджетов, но по какой-то причине я не могу получить идентификаторы виджета (getAppWidgetIds возвращает пустой массив).

Вот слушатель в методе onCreate MainActivity

@Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    AndroidThreeTen.init(this);

    // Add shared preferences listener
    Context context = this;
    SharedPreferences.OnSharedPreferenceChangeListener listener = new SharedPreferences.OnSharedPreferenceChangeListener() {
      public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
        Intent intent = new Intent(context, MyWidget.class);
        intent.setAction(MyWidget.ACTION_UPDATE);
        context.sendBroadcast(intent);
      }
    };

    SharedPreferences sharedPref = this.getSharedPreferences("CapacitorStorage", Context.MODE_PRIVATE);
    sharedPref.registerOnSharedPreferenceChangeListener(listener);

    // Initializes the Bridge
    this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
    }});
}

А вот onReceive от класса MyWidget:

@Override
public void onReceive(Context context, Intent intent) {

    super.onReceive(context, intent);

    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context.getApplicationContext());
    ComponentName thisWidget = new ComponentName(context, MyWidget.class);

    int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
    this.onUpdate(context, appWidgetManager, appWidgetIds);
    }

Независимо от того, что я пытаюсь,appWidgetIds всегда пуст. Я пытался переместить этот код в MainActivity, но результаты всегда одинаковы. У меня нет большого опыта работы с Java, поэтому я ценю любую помощь.

...