手持终端
Eclipse平台下Android开发环境的搭建
PhoneGap配置到Eclipse开发环境
使用PhoneGap开发Android应用程序
PhoneGap3.0以上版本配置到Eclipse开发环境
使用PhoneGap3.0版本开发Android应用程序
PhoneGap3.0的第三方Android插件
Cordova配置到Android Studio开发环境
Android系统基本架构
Android的字符串颜色图片样式
Android的常用控件及菜单
Android的消息提示及传递
Android系统的组件通信
Android系统的Service
Android的广播消息接收
Android的数据存储与访问
Android系统的网络应用
Android图形图像处理
Android的Fragment框架
Android系统的并发编程
Java源文件结构与保留字
Java语言的数据类型与变量
Java的运算符与流程控制
Java语言的数组及操作
Java面向对象编程
Java的常用类
Android开发常用工具及命令
Android应用程序权限管理
Android系统提供的R类内置资源
Android系统的控件类及其方法
Android系统的菜单类及其方法
Android系统的对话框
Android应用程序模型及组件
Android的绘图类及方法
Android系统的动画效果
Android的数据库操作
Android的多媒体功能
Android系统照相机的使用
Android的文本朗读TTS
获取Android系统信息
Android系统的电话操作
Android系统的定位
Android系统的传感器
Android广播分为广播发送者和广播接收者,通常情况下,BroadcastReceiver指的是广播接收者,用于异步接收广播Intent。广播Intent通过调用Context.sendBoardcast()等方法实现发送,调用Context.BroadcastReceiver()方法实现接收。通常,一个广播Intent可以被订阅了此Intent的多个广播接收者所接收。很多广播都产生于系统,如电池电量变化、用户改变语言设置等。
广播接收者没有用户界面,但可以为接收信息启动一个Activity,或者使用NotificationManager来通知用户。BroadcastReceiver接收广播方式一般有两种:
·Normal Broadcasts:调用Context.sendBoardcast方式,完全异步,都运行在未定义顺序下
·Ordered Broadcast:调用Context.sendOrderedBoardcast方法,发送到一个Receiver
所谓有序,就是每个Receiver执行后可以传播到下一个Receiver,也可以完全中止传播,即不传播给其他Receiver。而Receiver运行的顺序可以通过matched intent-filter里面的android: priority来控制,当优先级相同时,Receiver以任意顺序运行。
广播是Android组件间的一种通信方式,可以在同一App内部的同一组件内的单个或多个线性之间通信,可以在同一App内部的不同组件之间通信,还可以用于不同App之间通信,可以用于Android系统与App之间通信。一般情况下,同一App内同一组件之间的通信一般使用扩展变量作用域或Handler等方式实现,Broadcast更适用于不同进程间的消息通信。
1.发送广播:
1)自定义BroadcastReceiver:
自定义广播接收器需要继承基类BroadcastReceiver,并实现抽象方法onReceiver(context, receiver)。广播接收器接收到相应的广播后,会调用onReceiver()方法。默认情况下,广播接收器也是运行在UI线程中,因此onReceiver()方法中不能执行太耗时的操作。一般情况下,onReceiver()方法都会涉及与其他组件之间的交互,如发送Notification、启动Service等。
一个BroadcastReceiver对象只有在被调用onReceiver()方法时才有效,当从该函数返回后该对象就无效了,从而结束生命周期。因此,在所调用的onReceiver()方法中不能有过于耗时的操作,不能使用线程来执行。对于耗时的操作,应该在startService中完成。
2)注册类型:
BroadcastReceiver总体上分为静态注册和动态注册两种类型。
⑴静态注册:
直接在AndroidManifest.xml文件中进行注册:
<receiver android:enabled=["true"|"false"]
android:exported=["true"|"false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:progress="string"
......
</receiver>
其中属性:exported用于标识BroadcastReceiver能否接收其他App发出的广播,其默认值由receiver中有无intent-filter决定,如果有默认为true,否则false。permission如果设置,具有相应权限的广播发送方发送的广播才能被此BroadcastReceiver所接收。process设置BroadcastReceiver运行所处的进程,默认为App的进程,也可以指定独立的进行。示例:
<receiver android:name=".MyBroadcastReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
其中,intent-filter用于指定此广播接收器将用于接收特定类型的广播类型,示例中是用于接收网络状态改变或开启启动时系统自身所发出的广播。
⑵动态注册:
动态注册时,不需要AndroidManifest.xml中注册<receiver/>组件,直接在代码中通过调用Context的registerReceiver函数,就可以在程序中动态注册BroadcastReceiver。使用方法为:
mBroadcastReceiver=new MyBroadcastReceiver();
IntentFilter intentFilter=new IntentFilter();
intentFilter.addAction(BROADCAST_ACTION);
registerReceiver(mBroadcastReceiver,intentFilter);
注册后,不使用时要用unregisterReceiver()方法注销。一般在Activity的onStart方法中注册,在onStop方法中注销;或在onCreate方法中注册,就在OnDestroy方法中注销;在onResume方法中注册,就在onPause方法中注销。
2.有序广播:
有序广播指的是发送出去的广播被BroadcastReceiver按照先后顺序接收,定义过程与普通广播一样,但发送方法使用sendOrderedBoardcast。
多个当前已经注册且有效的BroadcastReceiver接收有序广播时,是按照先后顺序接收,先接收的BroadcastReceiver可以对此有序广播进行截断,使后面的BroadcastReceiver不再接收到此广播,也可以对广播进行修改。
BroadcastReceiver接收的先后顺序按照优先级priority属性值从大到小排序,对于具有相同的优先级的广播,动态广播会排在前面。
3.接收系统广播消息:
Android系统内置了多个系统广播,只要涉及手机的基本操作,基本上都会发出相应的系统广播,如开启启动、网络状态改变、拍照、屏幕关闭与开启、点亮不足等。每个系统广播都具有特定的intent-filter,其中主要是action。