«

黑马程序员-Android四大组建之BroadcastReceive广播接收者

时间:2024-3-2 17:17     作者:韩俊     分类: Android


——- android培训、java培训、期待与您交流! ———-
广播接收者,在android系统中有各种各样的广播,比如来电,短信的接受发送,电池电量的变化都会发送广播,我可以监听这些广播来执行自己的应用程序,从而达到我需要目的。广播接收者没有界面,但是我们可以通过广播接收者启动一个activity来达到通知用户的目的。和activity一样,广播接收者需要在清单文件中注册,才能使用。manifest文件中

<receiver android:name="com.qzd.mobilesafe.receiver.BootCompleteReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/><!-- 手机开机启动动作 -->          
            </intent-filter>
        </receiver>

如上就注册了一个接受手机开机的时候广播的广播接收者,来监听这一事件。
广播分为几种类型:
普通广播,通过Context.sendBroadcast(Intent myIntent)发送的

有序广播,通过Context.sendOrderedBroadcast(intent, receiverPermission)发送的,该方法第2个参数决定该广播的级别,级别数值是在 -1000 到 1000 之间 , 值越大 , 发送的优先级越高;广播接收者接收广播时的级别级别(可通过intentfilter中的priority进行设置设为2147483647时优先级最高),同级别接收的先后是随机的, 再到级别低的收到广播,高级别的或同级别先接收到广播的可以通过abortBroadcast()方法截断广播使其他的接收者无法收到该广播,还有其他构造函数

异步广播,通过Context.sendStickyBroadcast(Intent myIntent)发送的,还有sendStickyOrderedBroadcast(intent, resultReceiver, scheduler, initialCode, initialData, initialExtras)方法,该方法具有有序广播的特性也有异步广播的特性;发送异步广播要:

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

权限,接收并处理完Intent后,广播依然存在,直到你调用removeStickyBroadcast(intent)主动把它去掉。

public class BootCompleteReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
    }
}

写一个继承BroadCastReceiver的类,重写onReceive()方法,广播接收器仅在它执行这个方法时处于活跃状态。
注册广播接收者的方式有两种,一种是在清单文件注册还有一种是在代码里面进行动态注册

`
receiver = new InnerSmsReceiver();
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
filter.setPriority(Integer.MAX_VALUE);
registerReceiver(receiver,filter);

写上要监听的意图。用Unregister来注销掉。广播接收者生命周期只有十秒左右,动态注册广播接收器还有一个特点,就是当用来注册的Activity关掉后,广播也就失效了。静态注册无需担忧广播接收器是否被关闭,只要设备是开启状态,广播接收器也是打开着的。也就是说哪怕app本身未启动,该app订阅的广播在触发时也会对它起作用`

标签: android

热门推荐