广播
来源:互联网 发布:小蚂蚁微信编辑器源码 编辑:程序博客网 时间:2024/04/29 11:58
广播
广播作为安卓四大组件之一,具有很大的作用,总结了一下广播的使用方法,希望能够帮助到一些人
1.广播概念
系统提供,应用程序之间信息传递的机制2.原理
数据发送源发送广播(按照特定的频率(action)),广播接收方可以是多个,但是要保证接收方,接收的频率(action)和发送方一
intent-filter–设置频率(action)3.用途
意图过滤器作用Intetnt-Filter–>
告诉系统我能够处理哪些事情
1>接收系统广播 安卓系统不停往外发送广播
比如电量.wifi状态…
2>接收应用程序组件之间广播
界面–服务
界面–界面
服务–服务4.适用场景
广播获取消息后,应用场景
UI更新
handler–ui更新
5.学习广播基本步骤
广播对象的创建
1>创建广播类对象对象继承BroadcastReceiver
2>要求重写onReceive{
}
广播注册分为静态注册和动图注册两种方式
1静态注册
在主配置文件添加<receiver>
节点
<intent-filter>
–意图过滤器表明我能够处理的广播
特点:常驻型广播(活一次,永久活着,Activity销毁,还能接收广播)
测试–>系统广播的接收飞行模式测试
创建FirstBroadCast类继承BroadcastReceiver,代码如下
package com.tedu.broad;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.widget.Toast;public class FirstBroadCast extends BroadcastReceiver{ @Override //接收广播数据,并对数据做出处理 public void onReceive( Context context,//上下文对象 Intent intent//意图对象(数据,频率(action)) ) { //注意:不能阻止该方法超过10s---ANR //耗时操作不能做-网络访问,数据库获取数据 //测试wifi状态的改变 Toast.makeText(context, "飞行模式状态改变", Toast.LENGTH_SHORT).show(); }}
MainAcitivity代码如下
package com.tedu.broad;import android.os.Bundle;import android.app.Activity;import android.view.Menu;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; }}
AndroidManifest.xml文件中配置如下
<receiver android:name="com.tedu.broad.FirstBroadCast"> <intent-filter > <action android:name="android.net.wifi.STATE_CHANGE"/> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> <action <!-- 飞行模式Action --> android:name="android.intent.action.AIRPLANE_MODE"/> </intent-filter> </receiver>
2> 动态注册广播
创建在activity目录下注册位置
activity生命周期的oncreat()
注册的方法
registerReceiver(
innerReceiver–>广播对象
, filter—>过滤器
);
注意动态注册广播要在activity生命周期结束之后解除注册
protected void onDestroy() {
//将广播解除注册
unregisterReceiver(解除注册的广播对象);
}
动态广播如果不解除注册在给报异常
MainActivity代码如下
package com.tedu.broad;import android.os.Bundle;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.view.Menu;import android.view.View;import android.widget.Toast;public class MainActivity extends Activity { //声明一个类内的广播 private InnerBroadCast innerReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //注册过程 //广播初始化 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 pjy * 类内创建的一个广播 * */ class InnerBroadCast extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context, "InnerReciver反馈", Toast.LENGTH_SHORT).show(); } } /** * @param v * 用于处理单击按钮对广播进行发送 * */public void doClick(View v){ switch (v.getId()) { case R.id.main_send_btn: Intent intent=new Intent("com.tedu.broad_INNER"); //发送广播方法 sendBroadcast(intent); break; } }}
通过广播传递数据
发送数据
借助intent putExtra(“key”,value);获得数据
get…Extra(“key”);
广播的分类
无序广播
特点:只要注册相应频率(action)任何广播接收器都可以接收有序的广播
特点:传递有顺序,先接收广播的可以将广播中断,通过abortBroadcast()方法来中断广播,后序接受者收不到消息
注意如果无序广播调用这个方法出现异常接收的信息进行修改
setResult..();获取接收到的信息
getResult..();广播的优先级:
1> 如果没有设置任何优先条件的话.
在主配置文件里边谁先注册的谁先接收消息
2>人为干涉优先级
优先级所在位置 intent-filter标签里有属性
<intent-filter android:priority="" > priority="整型变量" 优先数值大会优先接收
3>匹配action(频道)相同又没有优先级设置的话,动态广播先于静态广播接收
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播:
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 广播
- 对于Dialog、Toast和Snackbar的二次熟悉
- iOS开发 _计算缓存大小/清理
- mouseout 和mouseleave 使用的区别
- mysql 常用命令(二)
- myeclipse中选择别的版本的jdk
- 广播
- Ubuntu 恢复AndroidStudio、Clion 、Intelij 快捷方式(Dash)
- D3D11教程十九之PlannarReflection(基于RTT技术和投影纹理技术)
- L0 范数图像平滑(L0 Smooth) 代码及详细注释 【OpenCV】
- dubbo zookeeper 学习一
- RtlConvertWin32FilePathToNtFilePath
- 对Java 中List的理解
- bxSlider 在网页里添加幻灯片效果
- 多列索引实验