- 浏览: 559088 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
北月与南安:
哥哥不要秀我,答案是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 3415提示:在访问网络,或者服务器的数据一定要注意 网络权限的声明: ... -
Android 之 AsyncTask 异步任务
2014-03-20 08:44 3522Android ... -
Android 之 Looper Handler Message 之间的关系
2014-03-19 10:16 3665Android 的消息 ... -
Android 之 多线程与Socket联合使用案例
2014-03-19 10:15 2673多线 ... -
Android 之 多线程和Socket套接字的使用介绍
2014-03-19 10:15 4884And ... -
Android 之 实现Runnable 接口与继承Thread的区别
2014-03-19 10:15 2199实现Runnable 接口 相 ... -
Android 之 GSON解析JSON数据
2014-03-19 10:14 4490... -
Android 之 使用Pull 解析xml文件
2014-03-18 21:04 1045/** * 使用Pull进行 xml 文件的解析 ... -
Android 之 使用DOM解析xml文件
2014-03-18 21:02 2745DOM 解析 xml 格式的文件 1、 xml简介:xml ... -
Android 之 百度API 密钥安全码生成
2014-03-04 22:29 2413近期要做个关于旅游助手的应用,开始接触百度API了。大神们 ... -
Android 之 EditText属性用法介绍
2014-01-06 23:49 3990EditText的属性 EditText继承关系:View-- ... -
Android 之 自定义适配器
2014-01-08 10:40 1773自定义适配器 1、实现 * 自定义适配器要继承 BaseA ... -
Android 之 自定义控件用法介绍
2014-01-08 10:40 1719自定义效果:实现:图片和文字混合 首先创建需要组合的子布局: ... -
Android 之 资源自适应与国际化
2014-01-08 10:40 3080<!-- 国际化和资源自适应 ... -
Android 之 Parcelable 序列化
2014-01-08 10:41 2698/* 序列化 * * 作 ... -
Android 之 五大布局案例
2014-01-08 10:41 21331、LinearLayout 线性布局例子: <Lin ... -
Android 之 通知Notification
2014-03-03 22:30 3897Notification 和 NotificationMana ... -
Android 之 手机全屏显示
2014-03-03 22:30 2344/* 1、全屏状态的显示 介绍:Android 中提供了Wi ... -
Android 之 拦截手机短信并自动转发
2014-03-03 22:29 5436拦截短信和发送短信都需要相关的权限: <?xml ve ... -
Android 之 将RAW资源文件写入SD卡工具类
2014-03-01 10:09 3614package com.sun.coptfiletosd; ...
相关推荐
在Android系统中,BroadcastReceiver(广播接收者)是四大组件之一,它扮演着接收系统或应用广播消息的重要角色。BroadcastReceiver使得应用可以在不运行的情况下,响应系统或其它应用发出的事件,例如系统启动完成...
在Android系统中,广播BroadcastReceiver是一种非常重要的组件,它允许应用程序接收并响应系统或自定义事件,例如设备连接状态变化、网络可用性更新等。在这个教学demo实例中,我们将深入探讨动态注册、静态注册以及...
在 Android 中,BroadcastReceiver 是四大组件之一,负责接收和处理系统级别的广播信息。这些广播信息可以提供各种系统状态信息,如电量低、存储空间不足、开机自启动等。 在 Android 中,BroadcastReceiver 需要...
在Android系统中,BroadcastReceiver(广播接收者)是四大组件之一,它负责监听并响应系统或应用程序发布的广播意图(Intent)。这个"android demo,BroadcastReceiver源代码的实现"是一个示例,旨在帮助开发者理解...
在Android系统中,BroadcastReceiver(广播接收者)是四大组件之一,它负责监听系统或应用程序发布的广播消息。BroadcastReceiver能够使应用在不运行的情况下对特定事件做出响应,从而实现跨应用通信。本示例将详细...
下面将详细阐述Android广播机制以及如何注册BroadcastReceiver。 1. Android广播机制: - 广播分为有序广播和无序广播。有序广播(Ordered Broadcast)按照优先级进行接收,接收者可以拦截并修改广播数据;无序...
"Android广播onReceiver回调更新ui"这个主题主要涉及如何在广播接收器中处理接收到的广播消息,并在用户界面(UI)上做出相应的更新。我们将深入探讨以下几个关键知识点: 1. **广播机制**: Android系统通过发送...
在Android系统中,BroadcastReceiver(广播接收者)是四大组件之一,它扮演着接收系统或应用广播消息的重要角色。BroadcastReceiver允许应用程序在不运行的情况下接收并处理系统或自定义广播事件,增强了系统的交互...
BroadcastReceiver是Android四大组件之一,它可以监听并响应系统广播事件,如设备启动、网络状态变化等。广播分为两种类型:有序广播(Ordered Broadcast)和无序广播(Unordered Broadcast)。有序广播允许接收者...
在Android应用开发中,BroadcastReceiver(广播接收器)是四大组件之一,它是系统用来传递消息和事件的重要机制。BroadcastReceiver可以监听系统或应用程序发送的广播Intent,并在接收到广播时执行相应的操作。以下...
BroadcastReceiver,中文名为广播接收器,是Android系统中四大组件之一,用于接收系统或应用程序发布的广播事件。在Android系统中,任何组件或者服务都可以发送广播,而BroadcastReceiver则可以监听并响应这些广播,...
在Android系统中,广播接收者(BroadcastReceiver)是四大组件之一,它负责监听并响应系统或应用程序发布的广播意图(Intent)。BroadcastReceiver可以帮助我们实现后台运行的任务,即使应用没有在前台运行,也能...
BroadcastReceiver是Android中处理系统广播事件的组件。它允许应用程序接收并响应系统或应用程序级别的广播消息,比如设备启动完成、网络状态改变等。BroadcastReceiver分为两种注册方式:静态注册和动态注册。 **...
在Android系统中,BroadcastReceiver(广播接收者)是四大组件之一,它负责监听系统或应用程序发布的广播事件,并在接收到广播时执行相应的处理。BroadcastReceiver的使用是Android开发中的重要一环,尤其对于系统...
所以,`BroadcastReceiver` 的生命周期非常短暂,必须高效地处理接收到的广播事件。 在 Android 系统中,`BroadcastReceiver` 是一个关键组件,它允许应用程序对外部事件进行响应,比如系统级别的事件(如电池状态...
广播通信在Android中是通过BroadcastReceiver来实现的。BroadcastReceiver可以注册接收特定类型的Intent广播,比如蓝牙设备状态改变、设备连接成功或失败等。为了监控蓝牙设备的状态,我们需要创建一个自定义的...
这是一个关于Android中四大组件之一 —— BroadcastReceiver,即广播的一个demo,里面涉及到BroadcastReceiver的两种注册方式,也简单的实现了广播,通过点击按钮发送广播,收到广播后打印日志。
在Android系统中,BroadcastReceiver是一种重要的组件,它用于监听并响应系统或应用广播事件。BroadcastReceiver使得应用程序可以在不运行状态下接收并处理系统广播,增强了应用的交互性和响应性。本Demo,"Android ...
在Android系统中,BroadcastReceiver是实现跨进程通信和全局事件通知的重要组件。它允许应用程序接收并响应系统或自定义广播事件,即使应用没有在运行。本文将深入探讨`BroadcastReceiver`的源码,帮助你理解其工作...