Как сделать так, чтобы одно приложение для Android отправляло сообщение другому, чтобы запустить его в Android O? - PullRequest
0 голосов
/ 10 октября 2018

До появления Android O я смог запустить функциональность второго сестринского приложения, основываясь на действии первого приложения.Я сделал это, отправив второму приложению намерение, которое было определено как широковещательный приемник во втором приложении.Точно так же.

Но, по-видимому, начиная с API 26, любые широковещательные приемники, определенные в манифесте и не относящиеся к конкретным системным (то есть, специфичные для приложения, такие как мой), игнорируются.Я получаю ошибки в logcat по этому поводу, я забываю детали.

Единственный способ заставить это работать, - это запустить второе приложение при загрузке (этот широковещательный приемник все еще работает)и пусть он запускает службу, которая устанавливает вещательный приемник программно, и служба поддерживает достаточное количество приложения, чтобы получать эти сообщения.

Я еще не пробовал, потому что это кажется излишним и очень ресурсоемким, просточтобы получить намерение что-то сделать.

Есть ли какой-нибудь другой механизм, чтобы сделать эту работу?

Спасибо.

1 Ответ

0 голосов
/ 10 октября 2018

Но, по-видимому, начиная с API 26, любые широковещательные приемники, определенные в манифесте, которые не относятся к конкретным системным (то есть к конкретным приложениям, таким как мой), игнорируются

Не верно.Вы неправильно понимаете ограничение.

Начиная с API 26, вы больше не можете получать неявные трансляции с получателем, объявленным манифестом.Тем не менее, явные широковещательные сообщения исключаются.

Явно нацеливайтесь на получателя в своем намерении:

Intent intent = new Intent("my_action");
intent.setComponent(new ComponentName("com.sister.packagename", "com.sister.packagename.Receiver");
sendBroadcast(intent);

Вам, очевидно, потребуется использовать собственное действие и соответствующий пакет./ имя класса, но это позволит вам сохранить получатель, определенный в манифесте.

Убедитесь, что вы проверяете действие в методе onReceive() этого получателя.Отправляя явную трансляцию, Android игнорирует ваш фильтр намерений и в любом случае отправляет намерение.

...