Мне удалось запустить мой BroadcastReceiver с помощью этого:
<receiver
android:name=".AlarmReceiver"
android:enabled="true"
android:exported="false">
</receiver>
Как видите, нет <intent-filter>
. Он вызывается правильно с правильными Intent
дополнениями. Но я огляделся и не понимаю, нужен он мне или нет? У меня есть метод setAction()
, вызываемый для моих Intent
, но чтобы сделать их уникальными по сравнению с другими, чтобы обеспечить конкретную проблему с уведомлениями, фактически не используя строку этого действия. Но в чем именно корреляция? Заранее спасибо.
Intent intent = new Intent(this.getContext(), AlarmReceiver.class);
intent.setAction("com.something"+System.currentTimeMillis());
//... extras are here
PendingIntent pi = PendingIntent.getBroadcast(this.getContext(), 123, intent, PendingIntent.FLAG_CANCEL_CURRENT|Intent.FILL_IN_DATA);
AlarmManager alarm = (AlarmManager)getContext().getSystemService(Activity.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pi);
Использование этого с тем, что у меня есть в файле манифеста, работает.
ИЗМЕНИТЬ Я нашел это в блоге разработчиков Android, и в нем говорится следующее:
Неявные намерения указывают только то, «чему» они должны соответствовать, используя действия, категории, данные, типы MIME и т. д. Точные компоненты, которые они найдут, определяются только во время выполнения диспетчером пакетов, который сопоставляет их с текущими приложениями.
Явные намерения указывают одно явное «кому», которому они должны соответствовать, через ComponentName. Независимо от того, что еще находится в Intent, оно связано только с точным именем пакета манифеста и именем класса, указанными в его ComponentName.
Я все еще немного сбит с толку этим объяснением, но оно кажется наиболее близким к тому, что я должен делать. Поэтому я уверен, что использую неявное намерение. Вопрос в том, нормально ли, что я опускаю <intent-filter>
? Я сопоставляю его с определенным классом. Может быть, не существует фактического действия, связывающего их вместе, но достаточно ли класса?