a ejecución de fondo no está permitida para recibir intención BOOT_COMPLETED

He leído sobre las limitaciones de ejecución en segundo plano de Android Oreo, y dice claramente queBOOT_COMPLETED broadcast no se ve afectado, pero no puedo hacer que funcione en Android Oreo.

Primero, estoy compilando contra SDK 27. En segundo lugar, declaró el receptor dentro del archivo de manifiesto:

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <receiver
        android:name="helpers.StartDetectionAtBoot"
        android:label="StartDetectionAtBoot"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT"/>

            <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>

            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <action android:name="android.intent.action.QUICKBOOT_POWERON"/>
            <!--For HTC devices-->
            <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
            <!--For MIUI devices-->
            <action android:name="android.intent.action.REBOOT"/>
        </intent-filter>
    </receiver>

Luego está la implementación del receptor, que también puede ser tan simple como eso:

public class StartDetectionAtBoot extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("test", "test");

        Intent intent0 = new Intent( context, ActivityRecognitionService.class );
        PendingIntent pendingIntent = PendingIntent.getService(context, 111, intent0, PendingIntent.FLAG_UPDATE_CURRENT);
        ActivityRecognitionClient activityRecognitionClient = ActivityRecognition.getClient(context);
        activityRecognitionClient.requestActivityUpdates(5000, pendingIntent);
    }
}

onReceiveo se llama al método @ y siempre recibiré un error de logcat en dispositivos / emuladores Android Oreo:

W / BroadcastQueue: no se permite la ejecución en segundo plano: recibir Intención {act = android.intent.action.BOOT_COMPLETED flg = 0x400010}

Leyendo otras respuestas, dijeron que había algunos problemas al registrar intenciones explícitas en el manifiesto, pero este no es el caso deBOOT_COMPLETED uno

Ningunoest ayudó porque no se llama al receptor en absoluto.

Registrando la intención de transmisión en tiempo de ejecución, haz que funcione (en el emulador, disparando la intención desde adb shell), pero no estoy seguro de que sea la forma correcta de hacerlo:

registerReceiver(new StartDetectionAtBoot(), new IntentFilter(Intent.ACTION_BOOT_COMPLETED));

¿Hay algún error conocido con esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta