我正在尝试实现一个捕获启动完成事件的广播接收器。
我把许可放在了表现中
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
我将intent过滤器放在清单中的接收器标签之后(类文件在接收器包中)
<receiver android:name=".receivers.BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="android.intent.action.REBOOT" />
</intent-filter>
</receiver>
最后我宣布了接收器类。该类应从数据库加载一些数据并设置警报。然而,要检查它是否有效,我已经放了一个Toast,但它没有显示出来并且是一种振动。
public class BootReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent callingIntent) {
Vibrator vibrator=(Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(5000);
Toast.makeText(context, "BOOT RECEIVED", Toast.LENGTH_LONG).show();
}
}
任何人都知道为什么请?
答案 0 :(得分:1)
所有刚刚安装的应用程序都进入停止状态(实际文件是/data/system/packages-stopped.xml)
从Android 3.1开始,系统的包管理器会跟踪处于停止状态的应用程序。请看这个链接:android 3.1 launch control。
对行动android.intent.action.BOOT_COMPLETED
的意图有一个FLAG_EXCLUDE_STOPPED_PACKAGES
额外标志。这意味着所有已停止的应用程序都不会收到BOOT_COMPLETED
个事件。
要使应用程序退出停止状态,请在安装后立即手动启动它。然后你可以重新启动并看到预期的Toast。