我想使用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();
}
有谁知道我的代码出了什么问题? 或者我想念的任何事情谢谢。
答案 0 :(得分:5)
我发现了为什么它不起作用。 由于我使用的是HTC设备,因此广播信息与其他设备不同。
com.htc.intent.action.QUICKBOOT_POWEROFF
”android.intent.action.ACTION_SHUTDOWN
”com.htc.intent.action.QUICKBOOT_POWERON
”在其他设备中,关闭设备时,可能会广播“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()
一起使用,但在您的情况下,它只会在您的流程运行时出现。