安卓学习笔记——Broadcast

广播:

 

发送者:发送广播的频道

接收者:监听某一个频道上

 

发送广播: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>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值