0

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

我把许可放在清单中

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

我将意图过滤器放在清单中的接收者标记之后(类文件在接收者包中)

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

请问有人知道为什么吗?

4

1 回答 1

1

所有刚安装的应用程序都进入停止状态(实际文件是/data/system/packages-stopped.xml)

从 Android 3.1 开始,系统的包管理器会跟踪处于停止状态的应用程序。请参阅此链接:android 3.1 启动控制

Intent with actionandroid.intent.action.BOOT_COMPLETED有一个FLAG_EXCLUDE_STOPPED_PACKAGES额外的标志。这意味着所有停止的应用程序都不会收到BOOT_COMPLETED事件。

要使您的应用程序退出停止状态,请在安装后手动启动它。然后您可以重新启动并看到预期的 Toast。

于 2013-05-16T11:07:44.993 回答