У меня есть приложение 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, поэтому я ценю любую помощь.