Почему я все еще получаю явные трансляции, если я не зарегистрировался для них? - PullRequest
0 голосов
/ 18 сентября 2018

Почему мой 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
        }
}

  1. Должен ли я зарегистрироваться на WIDGET_ACTION_FORCE_UPDATE?Если да, то почему это работает сейчас?

  2. Если да, я должен зарегистрироваться в манифесте или программно?

...