在布局文件给组件添加
android:onClick="doClick"
目的
是在activity处理点击事件
添加对应的处理方法
方法语法:
View v:处理多个组件的区分
v.getId();
public void doClick(View v){
}
--------------------
广播(四大组件之一)
广播概念
系统提供
应用程序之间
信息传递的机制
原理
数据发送源发送广播(按照特定的频率(action))
广播接收方可以是多个,但是要保证接收方
接收的频率(action)和发送方一致
intent-filter--设置频率(action)
用途
意图过滤器作用Intetnt-Filter-->
告诉系统我能够处理哪些事情
1>接收系统广播 安卓系统不停往外发送广播
比如电量.wifi状态...
2>接收应用程序组件之间广播
界面--服务
界面--界面
服务--服务
适用场景
广播获取消息后,应用场景
UI更新
handler--ui更新
eventbus --框架
------------------------
学习广播基本步骤
广播对象的创建
1>创建广播类对象对象继承BroadcastReceiver
2>要求重写onReceive{
}
发送广播
1>创建intent()对象-->设置相应action
sendBroadcast();
接收广播
在广播的onReceive()接收广播
广播注册
1>静态注册
在主配置文件添加
特点:常驻型广播(活一次,永久活着)
测试-->系统广播的接收
静态注册广播生命周期
2> 动态注册广播
创建在activity目录下
注册位置
activity生命周期的oncreat()
注册的方法
registerReceiver(
innerReceiver-->广播对象
, filter--->过滤器
);
注意动态注册广播要在activity生命周期结束之后解注册
protected void onDestroy() {
//将广播解除注册
unregisterReceiver(解除注册的广播对象);
}
动态广播如果不解除注册在给报异常
---------------------
通过广播传递数据
借助intent
putExtra("key",value);
get...Extra("key");
---------
模拟下载过程
1启动一个线程动态获取数据
讲数据装入广播发送到广播接收器让广播接收器开始更新
2能够修改主UI
从子线程将数据通过广播传递到UI
----------------
广播的分类
无序广播
特点:只要注册相应频率(action)
任何广播接收器都可以接收
有序的广播
特点:
传递有顺序
先接收广播的可以将广播中断
abortBroadcast();//可以达到中断广播的作用
注意如果无序广播调用这个方法出现异常
对于接收的信息进行修改
setResult..();getResult..();
后序接受者可能收不到消息
广播的优先级:
1> 如果没有设置任何优先条件的话.
在主配置文件里边谁先注册的谁先接收消息
2>人为干涉优先级
优先级所在位置 intent-filter标签里有属性
:priority="整型变量"
优先数值大会优先接收
3>匹配action(频道)相同又
优先级设置的话
动态广播先于静态广播接收
测试步骤
1>生明两个广播并且都做静态注册
2>将两个广播里面设置action设置成一样
3>给这两个广播接收器发送有序的广播
4>在两个广播接收器里做数据捕捉
粘性广播(粘滞广播)
需要权限:broadcast_sticky
特点:粘性广播会一直保存在系统中直至被使用(系统内存不足)
何时注册何时就可接收
5.0基本宣布过时
-------------------------
电话拨打的拦截
了解打电话
输号码
按拨号键
系统发出有序广播(setResultData())
修改的getResultData();获得的数据
步骤
权限:android.permission.PROCESS_OUTGOING_CALLS
创建一个广播
对广播进行静态注册
给广播添加频道(action)-->系统拨号的action
该广播就能处理拨号信息获取
通过号码匹配就可以达到拦截特定号码的功能