启动接收器不起作用

时间:2013-02-06 13:51:07

标签: android broadcastreceiver

我正在尝试实现一个捕获启动完成事件的广播接收器。

我把许可放在了表现中

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

任何人都知道为什么请?

1 个答案:

答案 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。