BOOT_COMPLETE和ACTION_SHUTDOWN从不调用BroadcastReceiver

时间:2014-01-29 23:21:45

标签: android broadcastreceiver boot

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

我给了Manifest

的许可
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

我尝试以两种方式注册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>

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

另外,我在onDestroy中取消注册BoradcastReceiver

public void onDestroy()
{
    unregisterReceiver(BootReceiver);
    unregisterReceiver(ShutDownReceiver);
    super.onDestroy();
}

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

4 个答案:

答案 0 :(得分:5)

我发现了为什么它不起作用。 由于我使用的是HTC设备,因此广播信息与其他设备不同。

  1. 关闭事件广播“com.htc.intent.action.QUICKBOOT_POWEROFF
  2. 重启(重启)事件广播“android.intent.action.ACTION_SHUTDOWN
  3. 开机事件广播“com.htc.intent.action.QUICKBOOT_POWERON
  4. 在其他设备中,关闭设备时,可能会广播“android.intent.action.QUICKBOOT_POWEROFF”。

答案 1 :(得分:0)

有可能您的应用程序尚未添加到“BOOT_COMPLETED”可能的接收者列表中,从Android 3.1开始,为了获得“BOOT_COMPLETED”操作,您的应用程序必须已由用户显式启动,要么显示活动或其他组件,在此之前您的应用程序将不会收到您期望的广播,重要的是要知道如果您“强制关闭”该应用程序,它将再次丢失广播,因此,尝试打开一个活动然后重新启动你的设备,你会得到它......

希望这有帮助!

问候!

答案 2 :(得分:0)

试试这个。

 <receiver
            android:name="packagename.GPSReceiver"
            android:enabled="true"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
            <intent-filter android:priority="500" >
                <action android:name="android.intent.action.BOOT_COMPLETED" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

答案 3 :(得分:0)

BOOT_COMPLETED必须在清单中注册。您无法通过registerReceiver()注册,因为当您致电registerReceiver()时,启动时间很长。

AFAIK关机广播与registerReceiver()一起使用,但在您的情况下,它只会在您的流程运行时出现。