BOOT_COMPLETE和ACTION_SHUTDOWN从不调用BroadcastReceiver

isc*_*ind 2 boot android broadcastreceiver

我想使用BroadcastReceiver捕获ACTION_SHUTDOWN和BOOT_COMPLETE.但事实证明两个信号都不会触发BroadcastReceiver(我没有看到任何登录logcat).这是我的源代码.

我给了Manifest许可

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Run Code Online (Sandbox Code Playgroud)

我尝试以两种方式注册BroadcastReceiver

protected void onCreate(Bundle savedInstanceState)
{
    registerReceiver(BootReceiver, new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
    registerReceiver(ShutDownReceiver, new IntentFilter(Intent.ACTION_SHUTDOWN));
}

<receiver android:name=".BootReceiver" 
          android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
      <intent-filter>
          <action android:name="android.intent.action.BOOT_COMPLETED" />
          <action android:name="android.intent.action.QUICKBOOT_POWERON" />
          <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

BootReceiver和ShutDownReceiver的源代码如下

private BroadcastReceiver BootReceiver  = new BroadcastReceiver()
{
    private String ACTION_BOOT = "android.intent.action.BOOT_COMPLETED";
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(ACTION_BOOT)){
            //my stuff  
            Log.d("Power", "Boot Complete");
        }
    }
};

private BroadcastReceiver ShutDownReceiver = new BroadcastReceiver()
{
    private String ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN";
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(ACTION_SHUTDOWN)) {
            //my stuff
            Log.d("Power", "Shutdown Complete");
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

另外,我在onDestroy中注销了BoradcastReceiver

public void onDestroy()
{
    unregisterReceiver(BootReceiver);
    unregisterReceiver(ShutDownReceiver);
    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

有谁知道我的代码有什么问题?或者我想念的任何事情 谢谢.

isc*_*ind 5

我发现了为什么它不起作用.由于我使用HTC设备,广播消息与其他消息不同.

  1. 关闭事件广播" com.htc.intent.action.QUICKBOOT_POWEROFF"
  2. 重启(重启)事件广播" android.intent.action.ACTION_SHUTDOWN"
  3. 开机事件广播" com.htc.intent.action.QUICKBOOT_POWERON"

在其他设备中,当关闭设备时,它可能会播放" android.intent.action.QUICKBOOT_POWEROFF".