Получается, что начиная с API 26 Android ограничивает доступ к широковещательным приемникам. Способ, которым я преодолел это, заключался в том, что я создал службу переднего плана в моем приемнике вещания, которая выполняла работу, которую я хотел в фоновом режиме, или которая запустила мой WorkManager.
[BroadcastReceiver]
[IntentFilter(new [] { Intent.ActionBootCompleted }, Priority = (int)IntentFilterPriority.HighPriority)]
public class BootBroadcastReceiver : BroadcastReceiver
{
public async override void OnReceive(Context context, Intent intent)
{
context.StartForegroundServiceCompat<AfterBootSyncService>();
}
}
Вот реализация метода расширения StartForegroundServiceCompat
:
public static void StartForegroundServiceCompat<T>(this Context context, Bundle args = null) where T : Service
{
var intent = new Intent(context, typeof(T));
if (args != null)
{
intent.PutExtras(args);
}
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.O)
{
context.StartForegroundService(intent);
}
else
{
context.StartService(intent);
}
}
Когда я делаю это, код в моем трансивере открывается как обычно.