Почему мой WidgetProvider получает пользовательские трансляции, даже если я их не регистрировал?Я имею в виду, что все нормально, но после пересмотра моего кода и чтения документации (я проверяю, все ли работает на Android 8 Oreo), я вижу, что должен зарегистрироваться для трансляций.Мой случай ниже:
У меня есть виджет, где вы нажимаете кнопку, и отправляется явная трансляция, которая говорит WidgetProvider
обновить содержимое:
Intent intentUpdate = new Intent(WIDGET_ACTION_FORCE_UPDATE, null, context.getApplicationContext(), CommonWidgetProvider.class);
PendingIntent pendingIntentUpdate = PendingIntent.getBroadcast(context, widgetID, intentUpdate, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.widgetLastUpdate, pendingIntentUpdate);
У меня также естьAlarmManager
, который периодически передает WIDGET_ACTION_FORCE_UPDATE
:
Intent alarmIntent = new Intent(CommonWidgetProvider.WIDGET_ACTION_FORCE_UPDATE, null, context, CommonWidgetProvider.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, ALARM_ID, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), updateInterval, pendingIntent);
И иногда я передаю это намерение программно:
Intent forceUpdateIntent = new Intent(WIDGET_ACTION_FORCE_UPDATE, null, context.getApplicationContext(), CommonWidgetProvider.class);
context.sendBroadcast(forceUpdateIntent);
Это мой приемник:
public class CommonWidgetProvider extends AppWidgetProvider {
public static final String WIDGET_ACTION_FORCE_UPDATE = "CUSTOM_WIDGET_FORCE_UPDATE";
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if(intent.getAction().equals(WIDGET_ACTION_FORCE_UPDATE)) {
... // works, but I have not registered for this broadcast
}
}
Должен ли я зарегистрироваться на WIDGET_ACTION_FORCE_UPDATE
?Если да, то почему это работает сейчас?
Если да, я должен зарегистрироваться в манифесте или программно?