Android ACTION_SHUTDOWN Broadcast no funciona

Código –

public class ShutdownReceiver extends BroadcastReceiver { private static final String TAG = "ShutdownReceiver"; @Override public void onReceive(final Context context, final Intent intent) { Logger.i(TAG, "Shutting Down.........................."); if("android.intent.action.ACTION_SHUTDOWN".equals(intent.getAction())) { //Power Off } } } 

Servicio –

 private BroadcastReceiver mReceiver = null; @Override public void onCreate() { super.onCreate(); // INITIALIZE RECEIVER //It is used to register broadcast for ShutDown or Power Off IntentFilter filter = new IntentFilter(Intent.ACTION_SHUTDOWN); mReceiver = new ShutdownReceiver(); registerReceiver(mReceiver, filter); } @Override public void onDestroy() { unregisterReceiver(mReceiver); } 

Permisos –

             

    Sé que esto es antiguo, pero tengo una solución parcial que sigue el material anterior. Al menos se llama al evento shutdown y puedo hacer ese artículo único al apagarlo, pero hay un efecto secundario que no entiendo; una pérdida de memoria En cierto sentido, está CERRADO por lo que la pérdida de memoria no tiene efectos drásticos, pero no lo entiendo y eso es una molestia.

    En cualquier caso, no tengo adiciones en el manifest.xml con respecto a este BroadcastReceiver. Está completamente definido en el código.

    En mi actividad principal, defino una clase como la anterior

     private class ShutDownReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(Intent.ACTION_SHUTDOWN.equals(intent.getAction())) { Log.i(TAG, "System shutting down"); context.stopService(new Intent(context, BluetoothPanService.class)); } } } 

    En el método onResume () de la actividad principal, instalo y registro el receptor:

     public void onResume() { super.onResume(); Log.i(TAG, "Measurement Log Activity has Resumed."); IntentFilter filter = new IntentFilter(Intent.ACTION_SHUTDOWN); mReceiver = new ShutDownReceiver(); registerReceiver(mReceiver, filter); } 

    (‘mReceiver’ se define como una variable de clase privada de la actividad principal)

    Y finalmente en la actividad principal onPause () anulo el registro del receptor

     public void onPause() { super.onPause(); Log.i(TAG, "Measurement Log Activity has Paused."); this.unregisterReceiver(mReceiver); } 

    Cuando el teléfono está apagado, el evento ACTION_SHUTDOWN se señala y el servicio se detiene; está señalizado el método onDestroy () y se ha publicado un mensaje a un servicio de intermediario MQTT remoto que indica que el cliente ya no está conectado. El agente remoto está recibiendo el mensaje, así sé que está funcionando.

    Sin embargo, después de todo, se desata el infierno y se debe principalmente a que no puedo detener el reinicio de mi servicio (aunque configuré START_NOT_STICKY en el método onStartCommand). Pero en este momento además de obtener muchas líneas rojas de error en logcat, ACTION_SHUTDOWN es atendido y la acción que necesito invocar se realiza.

    Espero que esto ayude a alguien (que quizás no esté lidiando con cerrar un servicio).