public class MainActivity extends Activity {
//声明一个类内的广播
private InnerBroadCast innerReceiver;
//TextView :线程进行广播
private TextView show_Number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show_Number=(TextView) findViewById(R.id.main_text);
/**
* 注册过程
*/
//广播初始化
innerReceiver=new InnerBroadCast();
//调用用方法注册
//intent-filter
IntentFilter filter=new IntentFilter();
filter.addAction("com.tedu.broad_INNER");//告诉系统我能处理声明广播
registerReceiver(innerReceiver, filter);
}
@Override
protected void onDestroy() {
//将广播解除注册
unregisterReceiver(innerReceiver);
super.onDestroy();
*
* @author tarena
* 广播接收器:发送的广播在此接收
*/
class InnerBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
int number=intent.getIntExtra("number",0);
show_Number.setText("当前进度"+number+"%");
Toast.makeText(context, "innerReceiver反馈"+number, Toast.LENGTH_SHORT).show();
}
}
/**
* 模拟线程和ui层数据传递
*/
public void StartThread(){
//启动线程动态发送广播
new Thread(new Runnable() {
@Override
public void run() {
//创建一个内部innerReceiver广播
Intent intent=new Intent("com.tedu.broad_INNER");
for(int i=1;i<=100;i++){
try {
Thread.sleep(1000);
intent.putExtra("number", i);
sendBroadcast(intent);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
发送广播
1>创建intent()对象-->设置相应action
sendBroadcast();
接收广播
在广播的onReceive()接收广播
广播注册
1>静态注册
在主配置文件添加
<receiver>
<intent-filter>--意图过滤器表明我能够处理的广播
特点:常驻型广播(活一次,永久活着)
测试-->系统广播的接收
静态注册广播生命周期
2> 动态注册广播
创建在activity目录下
注册位置
activity生命周期的oncreat()
注册的方法
registerReceiver(
innerReceiver-->广播对象
, filter--->过滤器
);
注意动态注册广播要在activity生命周期结束之后
解注册
protected void onDestroy() {
//将广播解除注册
unregisterReceiver(解除注册的广播对象);
}
//声明一个类内的广播
private InnerBroadCast innerReceiver;
//TextView :线程进行广播
private TextView show_Number;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
show_Number=(TextView) findViewById(R.id.main_text);
/**
* 注册过程
*/
//广播初始化
innerReceiver=new InnerBroadCast();
//调用用方法注册
//intent-filter
IntentFilter filter=new IntentFilter();
filter.addAction("com.tedu.broad_INNER");//告诉系统我能处理声明广播
registerReceiver(innerReceiver, filter);
}
@Override
protected void onDestroy() {
//将广播解除注册
unregisterReceiver(innerReceiver);
super.onDestroy();
}
/**
*
* @author tarena
* 广播接收器:发送的广播在此接收
*/
class InnerBroadCast extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
int number=intent.getIntExtra("number",0);
show_Number.setText("当前进度"+number+"%");
Toast.makeText(context, "innerReceiver反馈"+number, Toast.LENGTH_SHORT).show();
}
}
/**
* 模拟线程和ui层数据传递
*/
public void StartThread(){
//启动线程动态发送广播
new Thread(new Runnable() {
@Override
public void run() {
//创建一个内部innerReceiver广播
Intent intent=new Intent("com.tedu.broad_INNER");
for(int i=1;i<=100;i++){
try {
Thread.sleep(1000);
intent.putExtra("number", i);
sendBroadcast(intent);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
发送广播
1>创建intent()对象-->设置相应action
sendBroadcast();
接收广播
在广播的onReceive()接收广播
广播注册
1>静态注册
在主配置文件添加
<receiver>
<intent-filter>--意图过滤器表明我能够处理的广播
特点:常驻型广播(活一次,永久活着)
测试-->系统广播的接收
静态注册广播生命周期
2> 动态注册广播
创建在activity目录下
注册位置
activity生命周期的oncreat()
注册的方法
registerReceiver(
innerReceiver-->广播对象
, filter--->过滤器
);
注意动态注册广播要在activity生命周期结束之后
解注册
protected void onDestroy() {
//将广播解除注册
unregisterReceiver(解除注册的广播对象);
}
动态广播如果不解除注册在给报异常
同时在某些情况下,后序的广播接收者接收不到广播信息
广播的优先级:
1> 如果没有设置任何优先条件的话.
在主配置文件里边谁先注册的谁先接收消息
2>人为干涉优先级
优先级所在位置 intent-filter标签里有属性
<intent-filter
android:priority=""
>
:priority="整型变量"
优先数值大会优先接收
3>匹配action(频道)相同又
优先级设置的话
动态广播先于静态广播接收