- 浏览: 547789 次
- 性别:
- 来自: 武汉
-
文章分类
最新评论
-
北月与南安:
哥哥不要秀我,答案是11.38,你算出来36.43,要求N个点 ...
平均距离 -
xiao_android_jun:
[color=red][ size=xx-small ...
Android 之 进程的概念介绍 -
明子健:
小伙子,很有前途哦
《将博客搬至CSDN》 -
1140566087:
dugujiujian 写道R.layout.simple_s ...
Android 之 下拉(Spinner) 组件示例 -
dugujiujian:
R.layout.simple_spinner_dropdow ...
Android 之 下拉(Spinner) 组件示例
BroadcastReceiver
1. 介绍:四大组件之一,本质就是一个全局监听器;
2. 特性:由于为全局监听器,所以可以方便的实现系统中不同组件之间的通信;
3. 器也会随着关闭; BroadcastReceiver 是系统级别的监听器,拥有自己的进程,只要系统中存在着与之匹配的Intent 被广播出来,BroadcastReceiver 总会被激发;说明:BroadcastReceiver 和 事件处理机制相似,事件处理机制是程序级别的监听器,这些监听器运行在指定程序所在的进程中,当程序退出时,监听
4. 启动:程序是通过sendBroadcast() 方法来启动指定的BroadcastReceiver;
5. 实现:
a) 构建要广播的Intent,然后使用sendBroadcast() 进行发送;
b) 定义广播接收器,继承BoradcaseReceiver 类,重写onReceiver() 方法来响应事件;
6. 注册方式:
a) 静态注册:
1) <receiver android:name=”” >
1. <intent-filter>
a) <action android:name=”android.intent.action.MY_BROADCAST”/>
b) <category android:name=”android.intent.category.DEFAULT/>”
2. </intent-filter>
2) </receiver>
3) 提示:这种方式的注册是常驻型的,当应用程序关闭后,如果有广播信息传来,接收者也会被系统调用而自动运行的;
b) 动态注册:在代码中动态的指定广播地址并进行注册,
1) MyReceiver myreceiver = new MyRecevier();
2) IntentFilter intentFilter = new IntentFilter();
3) intentFilter.addAction(“android.intetn.action.MyReceiver”);
4) registerReceiver(myreceiver,intentFilter); //注册
5) unregisterReceiver(myreceiver); //注销
6) 注意:动态注册和静态注册相反,不是常驻型的,也就是广播会跟随程序的生命周期;
7. 注意:如果onReceiver() 方法不能在10秒内完成的,则提示该程序无响应,会弹出ANR的对话框;
8. 广播的分类:
a) 普通广播:
1) 优点:可以在同一时刻被所有接受者收到,消息传递的效率高;
2) 缺点:接受者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent 的传播;
3) 发送:sendBroadcast();
b) 有序广播:接收者将按预先声明的优先级一次接收Boradcast,优先级 -1000 --- 1000,数值越大优先级别越高;有序广播接收者可以终止Broadcast Intent的传播,一旦终止后面的接收者就不能收到Broadcast;另外,接收者可以将数据传递给下一个接收者;
1) 优先级设置:android:priority=””
2) 代码设置:IntentFilter 对象的setPriority(); 设置
3) 发送:sendOrderedBroadcast();
4) 终止广播:abortBoradcast();
5) 接收者传递信息:setResultExtras(bundle);
6) 下一接收者获取信息:Bundle bundle = getResultExtras(true);
7) 获取Action动作:intent.getAction();
8) 提示:有序广播所有的接收者监控的动作action 相同,优先级决定顺序;
9. 系统广播:系统中定义了很多标准的Broascast Action 来响应系统的广播事件;
a) ACTION_TIME_CHANGED : 时间改变时触发
b) ACTION_BOOT_COMPLETED : 系统启动完成后触发,比如开机自启软件;
c) ACTION_PACKAGE_ADDED : 添加包时触发
d) ACTION_BATTERY_CHANGED : 电量低时触发;
e) 常量值例如:android.intent.action.BOOT_COMPLETED
f) ACTION_TIME_CHANGED 时间改变
g) ACTION_DATE_CHANGED 日期改变
h) ACTION_MEDIA_EJECT 插入或拔出外部媒体
i) ACTION_MEDIA_BUTTON 按下媒体按钮;
j) ACTION_PACKAGE_REMOVED 删除包
事例如下:
首先看mainfest 配置文件中的配置:
布局文件:
主界面Activity 内容:---------------------------------------------------------
接收者 1:
接收者二:
接收者三:
接收者四:
1. 介绍:四大组件之一,本质就是一个全局监听器;
2. 特性:由于为全局监听器,所以可以方便的实现系统中不同组件之间的通信;
3. 器也会随着关闭; BroadcastReceiver 是系统级别的监听器,拥有自己的进程,只要系统中存在着与之匹配的Intent 被广播出来,BroadcastReceiver 总会被激发;说明:BroadcastReceiver 和 事件处理机制相似,事件处理机制是程序级别的监听器,这些监听器运行在指定程序所在的进程中,当程序退出时,监听
4. 启动:程序是通过sendBroadcast() 方法来启动指定的BroadcastReceiver;
5. 实现:
a) 构建要广播的Intent,然后使用sendBroadcast() 进行发送;
b) 定义广播接收器,继承BoradcaseReceiver 类,重写onReceiver() 方法来响应事件;
6. 注册方式:
a) 静态注册:
1) <receiver android:name=”” >
1. <intent-filter>
a) <action android:name=”android.intent.action.MY_BROADCAST”/>
b) <category android:name=”android.intent.category.DEFAULT/>”
2. </intent-filter>
2) </receiver>
3) 提示:这种方式的注册是常驻型的,当应用程序关闭后,如果有广播信息传来,接收者也会被系统调用而自动运行的;
b) 动态注册:在代码中动态的指定广播地址并进行注册,
1) MyReceiver myreceiver = new MyRecevier();
2) IntentFilter intentFilter = new IntentFilter();
3) intentFilter.addAction(“android.intetn.action.MyReceiver”);
4) registerReceiver(myreceiver,intentFilter); //注册
5) unregisterReceiver(myreceiver); //注销
6) 注意:动态注册和静态注册相反,不是常驻型的,也就是广播会跟随程序的生命周期;
7. 注意:如果onReceiver() 方法不能在10秒内完成的,则提示该程序无响应,会弹出ANR的对话框;
8. 广播的分类:
a) 普通广播:
1) 优点:可以在同一时刻被所有接受者收到,消息传递的效率高;
2) 缺点:接受者不能将处理结果传递给下一个接收者,并且无法终止Broadcast Intent 的传播;
3) 发送:sendBroadcast();
b) 有序广播:接收者将按预先声明的优先级一次接收Boradcast,优先级 -1000 --- 1000,数值越大优先级别越高;有序广播接收者可以终止Broadcast Intent的传播,一旦终止后面的接收者就不能收到Broadcast;另外,接收者可以将数据传递给下一个接收者;
1) 优先级设置:android:priority=””
2) 代码设置:IntentFilter 对象的setPriority(); 设置
3) 发送:sendOrderedBroadcast();
4) 终止广播:abortBoradcast();
5) 接收者传递信息:setResultExtras(bundle);
6) 下一接收者获取信息:Bundle bundle = getResultExtras(true);
7) 获取Action动作:intent.getAction();
8) 提示:有序广播所有的接收者监控的动作action 相同,优先级决定顺序;
9. 系统广播:系统中定义了很多标准的Broascast Action 来响应系统的广播事件;
a) ACTION_TIME_CHANGED : 时间改变时触发
b) ACTION_BOOT_COMPLETED : 系统启动完成后触发,比如开机自启软件;
c) ACTION_PACKAGE_ADDED : 添加包时触发
d) ACTION_BATTERY_CHANGED : 电量低时触发;
e) 常量值例如:android.intent.action.BOOT_COMPLETED
f) ACTION_TIME_CHANGED 时间改变
g) ACTION_DATE_CHANGED 日期改变
h) ACTION_MEDIA_EJECT 插入或拔出外部媒体
i) ACTION_MEDIA_BUTTON 按下媒体按钮;
j) ACTION_PACKAGE_REMOVED 删除包
事例如下:
首先看mainfest 配置文件中的配置:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.sun.broadcastreceiver" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" /> <!-- 定义:该应用的访问权限 --> <permission android:name="android.permission.MY_BROADCAST_RECEIVER" android:protectionLevel="normal" > </permission> <!-- 使用:声明使用的权限 --> <uses-permission android:name="android.permission.MY_BROADCAST_RECEIVER" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.sun.broadcastreceiver.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 使用静态方式注册广播接收者 , 监听动作:android.sun.MY_BROADCASE_RECEIVER --> <receiver android:name=".MyBroadcastReceiver" > <intent-filter> <!-- 监听的意图 --> <action android:name="android.sun.MY_BROADCAST_RECEIVER" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <!-- 有序广播 :使用 定义优先级:-1000 至 1000 的值,值越大优先级越高,先执行 android:priority="800" 所有的接收者指定相同的意图,才能保证广播的传递 --> <receiver android:name=".MyOrderBroadcastReceiverOne" > <intent-filter android:priority="800" > <action android:name="android.intent.action.MY_ORDER_BROADCAST" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <!-- 优先级为:android:priority="900" --> <receiver android:name=".MyOrderBroadcastReceiverTwo" > <intent-filter android:priority="900" > <action android:name="android.intent.action.MY_ORDER_BROADCAST" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> <!-- 优先级为:android:priority="700" --> <receiver android:name=".MyOrderBroadcastReceiverThree" > <intent-filter android:priority="700" > <action android:name="android.intent.action.MY_ORDER_BROADCAST" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </application> </manifest>
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/send" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="普通广播发送" /> <Button android:id="@+id/sendOrder" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="有序广播发送" /> </LinearLayout>
主界面Activity 内容:---------------------------------------------------------
package com.sun.broadcastreceiver; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; /** * 功能实现 -- 普通广播 和 有序广播的发送测试 * * @author Administrator * */ public class MainActivity extends Activity { private Button send, sendOrder; /** * 获取布局文件中控件的对象 */ public void init() { Log.i("msg", "init()...调用"); send = (Button) findViewById(R.id.send); sendOrder = (Button) findViewById(R.id.sendOrder); } // 程序入口 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); // 初始化 // 设置监听器 send.setOnClickListener(listener); sendOrder.setOnClickListener(listener); } /***************************************************************************/ /** * 动作,发送普通广播 */ public void sendAction() { Intent intent = new Intent(); intent.setAction("android.sun.MY_BROADCAST_RECEIVER") ; // 使用隐士意图进行广播的发送 intent.putExtra("msg", "我是被发送测试普通广播的"); sendBroadcast(intent, "android.permission.MY_BROADCAST_RECEIVER"); } /** * 动作:发送有序广播 */ public void sendOrderAction() { Intent intent = new Intent(); intent.setAction("android.intent.action.MY_ORDER_BROADCAST"); intent.putExtra("msg", "首任接收者"); sendOrderedBroadcast(intent, "android.permission.MY_BROADCAST_RECEIVER"); } /** 按钮监听器 */ private android.view.View.OnClickListener listener = new View.OnClickListener() { public void onClick(View v) { if (v.getId() == R.id.send) { sendAction(); return; } if (v.getId() == R.id.sendOrder) { sendOrderAction(); } } }; /**--------------------------- Start广播:动态注册 与注销------------------------------------------------------*/ /** * 程序结束后注销广播 -- unregisterReceiver(); */ protected void onDestroy() { super.onDestroy(); unregisterReceiver(dynamic); } /** * 程序运行时注册广播 -- registerReceiver(); */ protected void onResume() { super.onResume(); Log.i("msg", "onResume()..."); // 根据意图创建 Intent 过滤器 IntentFilter intentFilter = new IntentFilter("android.sun.MY_DYNAMIC_BROADCAST_RECEIVER"); registerReceiver(dynamic, intentFilter); // 注册 sendDynamicBoradcast(); } /** * 动态注册发送广播 */ public void sendDynamicBoradcast(){ // 根据 广播地址 构建Intent 对象 Intent intent = new Intent("android.sun.MY_DYNAMIC_BROADCAST_RECEIVER"); sendBroadcast(intent); // 发送广播 } //动态注册--- 接收者 private BroadcastReceiver dynamic = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { Log.i("msg","动态测试意图:"+intent.getAction()); } }; /**--------------------------- End 广播:动态注册 与注销------------------------------------------------------*/ }
接收者 1:
/** * 广播接收者 -- 收到广播后处理动作 * @author Administrator * */ public class MyBroadcastReceiver extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Log.i("msg","广播已经收到 onReceive()..."); String action = intent.getAction(); // 得到意图名称 String msg = intent.getStringExtra("msg"); //得到发送广播传递的数据 Log.i("msg","意图:"+action+" 信息:"+msg); } }
接收者二:
/** * 有序广播测试 -- 接收者 , 级别:android.pro * @author Administrator * */ public class MyOrderBroadcastReceiverOne extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Log.i("msg", "接收者one ...."); Bundle bundle = new Bundle(); bundle.putString("info","我是从one来的"); this.setResultExtras(bundle); // 此接收者传递数据给下一个接收者 abortBroadcast(); // 终止广播 } }
接收者三:
public class MyOrderBroadcastReceiverTwo extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Bundle bundle = getResultExtras(true); Log.i("msg","three:"+this.getResultCode()+" "+bundle.getString("info")); } }
接收者四:
public class MyOrderBroadcastReceiverThree extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = getResultExtras(true); Log.i("msg","two:"+bundle.getString("info")); } }
- broadcastReceiver.rar (1.2 MB)
- 下载次数: 10
发表评论
-
Android 之 网络访问服务器,解析JSON数据
2014-03-28 22:50 3343提示:在访问网络,或者服务器的数据一定要注意 网络权限的声明: ... -
Android 之 AsyncTask 异步任务
2014-03-20 08:44 3482Android ... -
Android 之 Looper Handler Message 之间的关系
2014-03-19 10:16 3615Android 的消息 ... -
Android 之 多线程与Socket联合使用案例
2014-03-19 10:15 2607多线 ... -
Android 之 多线程和Socket套接字的使用介绍
2014-03-19 10:15 4820And ... -
Android 之 实现Runnable 接口与继承Thread的区别
2014-03-19 10:15 2155实现Runnable 接口 相 ... -
Android 之 GSON解析JSON数据
2014-03-19 10:14 4427... -
Android 之 使用Pull 解析xml文件
2014-03-18 21:04 1003/** * 使用Pull进行 xml 文件的解析 ... -
Android 之 使用DOM解析xml文件
2014-03-18 21:02 2695DOM 解析 xml 格式的文件 1、 xml简介:xml ... -
Android 之 百度API 密钥安全码生成
2014-03-04 22:29 2333近期要做个关于旅游助手的应用,开始接触百度API了。大神们 ... -
Android 之 EditText属性用法介绍
2014-01-06 23:49 3947EditText的属性 EditText继承关系:View-- ... -
Android 之 自定义适配器
2014-01-08 10:40 1706自定义适配器 1、实现 * 自定义适配器要继承 BaseA ... -
Android 之 自定义控件用法介绍
2014-01-08 10:40 1682自定义效果:实现:图片和文字混合 首先创建需要组合的子布局: ... -
Android 之 资源自适应与国际化
2014-01-08 10:40 3019<!-- 国际化和资源自适应 ... -
Android 之 Parcelable 序列化
2014-01-08 10:41 2653/* 序列化 * * 作 ... -
Android 之 五大布局案例
2014-01-08 10:41 20981、LinearLayout 线性布局例子: <Lin ... -
Android 之 通知Notification
2014-03-03 22:30 3823Notification 和 NotificationMana ... -
Android 之 手机全屏显示
2014-03-03 22:30 2285/* 1、全屏状态的显示 介绍:Android 中提供了Wi ... -
Android 之 拦截手机短信并自动转发
2014-03-03 22:29 5436拦截短信和发送短信都需要相关的权限: <?xml ve ... -
Android 之 将RAW资源文件写入SD卡工具类
2014-03-01 10:09 3514package com.sun.coptfiletosd; ...
相关推荐
广播的的教学demo实例;适合初学的学生。 动态注册广播; 静态注册广播; 有序广播;
Android四大组件——BroadcastReceiver普通广播、有序广播、拦截广播、本地广播、Sticky广播、系统广播
android广播实现代码,使用两种方法注册BroadcastReceiver
这是一个关于Android中四大组件之一 —— BroadcastReceiver,即广播的一个demo,里面涉及到BroadcastReceiver的两种注册方式,也简单的实现了广播,通过点击按钮发送广播,收到广播后打印日志。
主要为大家详细介绍了Android BroadcastReceiver接收收到短信的广播,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
广播,这个诞生于1906年的科技产品,持续...Android通过广播机制,能够让订阅者接受到想听到的广播,并进行进一步的处理和操作。如果你想在虚拟的android世界中创建属于你自己的电台广播,那么就赶紧点击本集视频观看吧
一般来说,都是在一个Activity启动的时候使用这样的方法注册BroadcastReceiver,一旦接收到广播的事件,就可以在onReceive方法当中更新当前的这个Activity当中的控件。但是需要注意的是如果这个Activity不可见了,就...
介绍地址:http://blog.csdn.net/niubitianping/article/details/51925048
演示了BroadcastReceiver的简单用法。
主要介绍了Android BroadcastReceiver广播注册方式总结的相关资料,需要的朋友可以参考下
android service Notification BroadcastReceiver Intent 安装的服务开机自启动,service定时的打印消息,消息同时显示在通知栏,窗体界面的跳转,自定义控件的开发。系统广播,定时广播,轮询广播等。...
当 Android 应用程序被编译,会自动生成一个 R 类,其中包含了所有 res/ 目录下资源的 ID,如布局文件,资源文件,图片(values下所有文件)的ID等。在需要使用这些资源的时候就可以使用R类来进行调用。这些可供调用...
上一次介绍了Android BroadcastReceiver的广播发送,这一次主要介绍有序广播的发送。
android广播实现方式
android 静态注册和动态注册的使用,普通广播的发送demo
Android移动开发检测网络状态并使用BroadcastReceiver(广播接收者)进行接收网络变化的后续处理
BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。 在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动...
广播接收器-BroadcastReceiver 电池电量显示