广播机制 静态注册

  1. 动态注册的广播接收器可以自由的控制注册与注销,在灵活方面有很大的优势,但是,它也存在着一个缺点,就是必须要在程序启动后才能够接收到广播,因为注册的逻辑是写在onCreate()里的。那么,有什么方法可以让程序在未启动的情况下就能接收到广播那?这就需要静态注册

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xiaoxu.administrator.myapplication3">

<uses-permission  android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">


        <activity
            android:name=".MainActivity"
            android:theme="@style/AppTheme2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            intent-filter>
        activity>
        <receiver android:name=".Broadcast.MyBroadcast1">

            <intent-filter>

                  <action android:name="android.intent.action.BOOT_COMPLETED"/>          
            intent-filter>

        receiver>

    application>

manifest>
  • < application>标签中,设置了一个新的标签< receiver>,所有的静态广播的注册都是在这里进行注册的。它的用法和activity的注册类似,也是通过指定android:name来指定具体注册哪一个广播接收器,然后在 < intent-filter>中加入我们想要接收的广播就行了。同样,监听系统开机广播也要声明权限,
  • android.permission.RECEIVE_BOOT_COMPLETED
  • 这样在再次开机后,MyBroadcast1就会接收到这条开机广播,并处理相应的事情。
  • 需要注意的是:在广播接收器的onReceiver()方法中,不要添加过多的逻辑或者任何耗时的操作,因为在广播接收器中是不允许开启线程的,当onReceive()方法运行了较长的时间而没有结束的时候,程序就会报错。因此,广播接收器通常扮演者打开程序其他组件的角色,比如创建一个状态栏通知,或者启动一个服务等。

你可能感兴趣的:(Android)