广播:
发送者:发送广播的频道
接收者:监听某一个频道上
发送广播:sendBroadcast(Intent)
广播是可以跨app的
如果广播不想跨app发送:LocalBroadcastManager
发送本地广播:manager注册、manager发送
广播接收者的注册:
1.Context.registerReceiver(receiver, filter)
参数一:是receiver接收者的实例
参数二:是IntentFilte的实例,IntentFile的参数是自定义的Action值,在清单文件中也是如此。
IntentFilter filter = new IntentFilter("com.qf.asd");
2.清单文件中注册:<receiver>节点下IntentFilter的节点下添加Action
注意:如果通过代码注册广播,要记得解注册在, onDestroy()中使用unregisterReceiver(receiver),receiver要使用同一个receiver,注册哪个就解除注册哪个。
广播的发送:
1.无序广播:Context.sendBroadcast()
2.有序广播:Context.sendOrderedBroadcast()
广播接收者的接收顺序:android:priority
发送者:可以是Intent的Action
广播接收者:指定action---》IntentFilter中---》可以通过构造(代码)、静态intentfilter节点添加子节点:action
代码注册:一定要记得解注册。App挂了,接不到广播
静态注册:及时app没有开启,一样可以接收到广播。
权限添加:
在发广播的时候指定接收者要想接收该广播,所需要的权限:sendBroadcast(Intent,StringPermission)--->发布权限,在清单文件中,添加<permission>
接收者有权限才可以接收:清单文件<uses-permission>
接收者定义权限:
receiver节点添加属性permission,发布:permission
发送者使用权限:
Uses-permission
Receiver节点的exported属性:false广播接收者,不对外暴露---》其他app在receiver监听的频道上发广播,接收不到
发送有序广播:
SendOrderedBroadcast()
接收者:
指定接收的优先级:receiver接下intent-filter的属性priority:值越大,优先级越高(-1000~1000),也就是数字大的先接收到,就像排队一样,数字大的排前面。
上层接收者下层接收者传数据:就是一个广播有多个接收者,而这个接收者是串联的,好比排队传话一样,前面的人用setResultData()或把话传个后一个人,后一个人getResultData()后这getResultExtras()得到数据,在这其中某一个人也可以中断传话,不传个下一个人就是abortBroadcast()。
网络状态发生改变的广播
知道发送广播者所在的频道:
ConnectivityManager.CONNECTIVITY_ACTION
接收到广播之后:
判断有网了还是没网了---》权限
打出去电话:
权限:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/> |
Action:
<receiver android:name="com.example.broadcastk02.Receiverk02"> <intent-filter> <action android:name="android.intent.action.NEW_OUTGOING_CALL"></action> </intent-filter> </receiver> |
取出电话号码:
if(Intent.ACTION_NEW_OUTGOING_CALL.equals(intent.getAction())){ System.out.println("打出去电话"+intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER)); } |
接收短信
a) 权限
<uses-permission android:name="android.permission.RECEIVE_SMS"/> |
b) Action
<receiver android:name="com.example.broadcast03.MyReceiver"> <intent-filter android:priority="999"> <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> </intent-filter> </receiver> |