Мой код ниже не работает на androind 8.0+, но работает до 8.0.Таким образом, кажется, что это воспринимается как неявная трансляция.
[BroadcastReceiver(Enabled = true, Exported = true)]
[IntentFilter(new[] { "notpackagename.com.IntentReceiver.MySampleBroadcastReceiver" })]
public class MySampleBroadcastReceiver : BroadcastReceiver
{
public override void OnReceive(Context context, Intent intent)
{
String value = intent.GetStringExtra("key");
Console.WriteLine(value);
}
}
var intent = new Intent("notpackagename.com.IntentReceiver.MySampleBroadcastReceiver");
intent.PutExtra("key", "MySampleBroadcastReceiver");
SendBroadcast(intent);
Я хочу знать, что определяется как явная или неявная трансляция?
Поскольку мне нужно, чтобы приложение получало сообщение, когда оно неработает , как показано ниже:
https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers
Основное отличие между получателем, зарегистрированным в манифесте, и получателем, зарегистрированным в контексте, заключается в том, что получатель, зарегистрированный в контексте, будет толькоотвечать на широковещательные рассылки во время работы приложения, в то время как зарегистрированный получатель манифеста может отвечать на широковещательные рассылки, даже если приложение не работает.
https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers
Androidопределяет два типа широковещательных рассылок:
Явная широковещательная рассылка - эти типы широковещательных рассылок предназначены для конкретного приложения.Наиболее распространенное использование явной трансляции - это запуск Activity.Пример явной трансляции, когда приложению необходимо набрать номер телефона;он отправит Intent, предназначенный для приложения Phone на Android, и передаст номер телефона, который нужно набрать.Android затем направит намерение в приложение «Телефон».
Неявная трансляция - эти трансляции отправляются всем приложениям на устройстве.Примером неявной трансляции является намерение ACTION_POWER_CONNECTED.Это намерение публикуется каждый раз, когда Android обнаруживает, что аккумулятор устройства заряжается.Android направит это намерение всем приложениям, которые зарегистрировались для этого события.
Обновление
Пожалуйста, исправьте меня, если я ошибаюсь:
На основании приведенного ниже описания MySampleBroadcastReceiver
выше является получателем, зарегистрированным в манифесте, поэтому он должен иметь возможность принимать сообщения.Но это даже не работает.Я должен изменить его на динамическую регистрацию.
Фильтр намерений используется для регистрации получателя вещания, чтобы Android мог правильно маршрутизировать сообщения.Фильтр намерений может быть указан во время выполнения (его иногда называют зарегистрированным по контексту получателем или динамической регистрацией) или он может быть статически определен в манифесте Android (зарегистрированном получателе манифеста).
https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/broadcast-receivers