Android的ACTION_SHUTDOWN广播不能正常工作(Android ACTION_SHU

2019-07-17 18:40发布

代码 -

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
        }
    }
}

服务-

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);
   }

权限 -

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.DEVICE_POWER" />

Answer 1:

我知道这是旧的,但我具有遵循上面的材料的部分解决方案。 至少关闭事件被称为,我能够做到在关机的独特项目,但有一个副作用,就是我不明白; 内存泄漏。 在某种意义上,它也将关闭,因此内存泄漏没有巨大的影响,但我不明白,这是一个麻烦。

在任何情况下,我必须在manifest.xml没有增加相对于该广播接收器。 它是在代码完全限定。

在我的主要活动定义为上述类

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));
        }
    }

}

在主要活动的的onResume()方法,我实例化和注册接收器:

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”被定义为主要活动的私有类变量)

终于在主要活动的的onPause()取消注册接收器

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

当手机处于关机状态的ACTION_SHUTDOWN事件确实是信号并停止该服务; 它的onDestroy()方法被用信号发送和消息到远程代理MQTT服务发布指示客户端不再连接。 所以我知道这是工作的远程代理越来越消息。

然而,在所有的地狱冲出重围,它主要是因为我不能重新开始(尽管我在onStartCommand方法设置START_NOT_STICKY)停止我的服务。 但就在这个时候,除了获得了很多的logcat的红色错误线条,ACTION_SHUTDOWN是听取和我需要调用的动作得到执行。

希望这可以帮助别人(谁也许并不涉及关停服务)。



文章来源: Android ACTION_SHUTDOWN Broadcast not working