静态注册实现开机启动
动态注册的广播接收器可以自由地控制注册与注销,在灵活性方面有很大的优势,但是 它也存在着一个
缺点,即必须要在程序启动之后才能接收到广播,因为注册的逻辑是写在 onCreate()方法中的。那么有没有
什么办法可以让程序在未启动的情况下就能接收到广播 呢?这就需要使用静态注册的方式了。
里我们准备让程序接收一条开机广播,当收到这条广播时就可以在 onReceive()方法里 执行相应的逻辑,
从而实现开机启动的功能。新建一个 BootCompleteReceiver 继承自 BroadcastReceiver。
代码:
public class BootCompleteReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "Boot Complete", Toast.LENGTH_LONG).show(); } }
这里不再使用内部类的方式来定义广播接收器,我们需要在 AndroidManifest.xml中将这个广播接收器的类名注册一下。
在 onReceive()方法中,还是简单 地使用 Toast弹出一段提示信息:
AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest" android:versionCode="1" android:versionName="1.0">…… <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme">…… <receiver android:name=".BootCompleteReceiver"> <intent-filter> <actionandroid:name="android.intent.action.BOOT_COMPLETED"/> </intent-filter> </receiver> </application> </manifest>
在这里即使注册了静态的广播接收器。那么 静态注册实现开机启动也就是这些了。