Я пытаюсь заставить два приложения общаться через трансляции. Первое приложение отправляет трансляцию с использованием кода, подобного следующему:
Intent outIntent = new Intent("org.example.WHATEVER");
PackageManager pm = this.getPackageManager();
List<ResolveInfo> receivers = pm.queryBroadcastReceivers(outIntent, 0);
if (receivers != null)
for (ResolveInfo receiver : receivers) {
Log.d("Sender", String.format("Polling %s", receiver.activityInfo.packageName));
outIntent = new Intent("org.example.WHATEVER");
outIntent.setPackage(receiver.activityInfo.packageName);
sendBroadcast(outIntent);
}
Принимающая сторона регистрирует BroadcastReceiver
в своем манифесте:
<receiver android:name="org.example.receiverapp.WhateverReceiver" >
<intent-filter>
<action android:name="org.example.WHATEVER" />
</intent-filter>
</receiver>
Метод onReceive()
записывает запись журнала при вызове.
Когда приложение-получатель работает (т. Е. У меня основное занятие было на экране, а затем удалено от него), оно обрабатывает трансляцию. Однако, если приложение-получатель не запущено (что я проверяю, нажав «Назад» и активировав «Долгое нажатие кнопки« Назад, чтобы убить приложение »в настройках разработчика»), оно не разбудит трансляция.
Я намеренно устанавливаю имя пакета для намерения, чтобы избежать проблем с заявленными декларацией получателями, которые больше не получают неявные широковещательные сообщения от Android 8 и выше. Кроме того, я использую Android 7 с обоими приложениями, ориентированными на API 23, поэтому любые ограничения в Android 8 в любом случае не должны иметь значения в этой настройке.
Я столкнулся с комментарием , автор которого предполагает, что некоторые разновидности Android могут не пробудить приложения для широковещательной передачи, что, по-видимому, и здесь (с LineageOS 14.1), хотя этот комментарий не не очень конкретный, и я не нашел ничего другого, подтверждающего это утверждение.
Это то, что здесь происходит? Если так, как я могу гарантировать, что приложение-получатель разбудит трансляция (по крайней мере, если оно направлено)? Если нет, то что здесь не так?