1. 发送广播和接受广播
1.1 创建一个广播接受者,继承broadcastreceiver,重写onreceive方法
class DianPuReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int position = intent.getIntExtra("clickPostion", 0);
}
}
1.2 注册广播(代码注册和清单文件注册)
代码注册:
receiver = new DianPuReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.qiancheng.almirah2.guangdianpuitemchange");
registerReceiver(receiver, filter);
清单文件注册:
注意:
(1) java代码注册的广播接受者优先级要比清单文件的要高, 但是当前的广播接受者的生命周期的期限和activity是相关联的,activity销毁,广播接收者也就不再起作用
(2) 通过清单文件注册的广播接收者在系统中运行一次后就会被注册到系统中,以后无需运行此广播接受者,但是也可以接收到广播
(3) 接收广播时要注意在清单文件中添加对应的权限
2.系统常见的广播
2.1 拨打电话的广播
拦截的广播:
android.intent.action.NEW_OUTGOING_CALL
需要的权限:
android.permission.PROCESS_OUTGOING_CALLS
2.2 sd卡卸载的广播
拦截的广播:
android.intent.action.MEDIA_UNMOUNTED
指定scheme:file
清单文件中注册:
2.3 系统开机的广播
拦截的广播:
android.intent.action.BOOT_COMPLETED
需要的权限:
android.permission.RECEIVE_BOOT_COMPLETED
注意:
3.0以上版本必须加权限,以下的版本可以不加,
3.0以上的版本如果用户没有启动过程序, 接收不到开启启动完成的广播
2.4 安装和卸载程序的广播
拦截的广播:
android.intent.action.PACKAGE_ADDED
android.intent.action.PACKAGE_REMOVED
指定scheme: package
拦截的广播:
android.provider.Telephony.SMS_RECEIVED
需要的权限:
android.permission.RECEIVE_SMS
注意:优先级别需设置为最大, 在系统收到短信之前接收短信:priority="1000”
注意:android 4.2 后废除了此action
3.1无序广播
无序广播不可以被拦截,如果被拦截的话会报错
所有接收无序广播的广播接收者在此广播被发送时均能接收到此广播
无序广播使用sendBroadcast方法来发送
3.2有序广播
有序广播可以被拦截,且优先级高的接收者可以拦截优先级低的
广播接收者的优先级的取值范围是: 1000(最高) ~ -1000(最低)
相同优先级下,接收的顺序要看在清单文件中声明的顺序,先声明的接收者比后声明的要先收到广播
无序广播使用sendOrderedBroadcast方法来发送,使用abortBroadcast方法拦截
广播接收者的优先级在清单文件中声明接收者时,在<intent-filter>标签下通过设置”android:property”属性来设置