在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制;这些组件甚至是可以位于不同的进程中。由于广播的发送者和接收者事先不需要知道对方的存在,从而系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。
Broadcast是广播,Android中用于接收广播的组件是BroadcastReceiver,这个组件接收到特定的广播之后就可以进行处理特定的任务。
Android中的广播事件有两种,一种就是系统广播事件,比如:ACTION_BOOT_COMPLETED(系统启动完成后触发),ACTION_TIME_CHANGED(系统时间改变时触发),ACTION_BATTERY_LOW(电量低时触发)等等。另外一种是我们自定义的广播事件。
1)注册广播事件:注册方式有两种,一种是静态注册,就是在AndroidManifest.xml文件中定义,注册的广播接收器必须要继承BroadcastReceiver;另一种是动态注册,是在程序中使用Context.registerReceiver注册,注册的广播接收器相当于一个匿名类。两种方式都需要IntentFIlter。
2)发送广播事件:通过Context.sendBroadcast来发送,由Intent来传递注册时用到的Action。
3)接收广播事件:当发送的广播被接收器监听到后,会调用它的onReceive()方法,并将包含消息的Intent对象传给它。onReceive中代码的执行时间不要超过5s,否则Android会弹出超时dialog。
Android中的Content provider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的方式之一,还有文件,sharePreference,SQLite数据库等方式存储共享数据库,但是ContentProvider更好的提供了数据共享接口的统一性。
Android提供了一些主要数据类型的Content provider,比如音频、视频、图片和私人通讯录等。可在android.provider包下面找到一些android提供的Content provider。可以获得这些Content provider,查询它们包含的数据,当然前提是已获得适当的读取权限。
使用方法:
在android中,通常用一个URL来标识一个ContentProvider,与URL相关的类有Uri, UriMatcher, ContentUris, TextUtils,分述如下:
Uri:主要组成部分:scheme + 主机名或authority + path
1)ContentProvider(内容提供者)的scheme已经由Android所规定, scheme为:content://
2)主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
3)路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
要操作person表中id为10的记录,可以构建这样的路径:/person/10
要操作person表中id为10的记录的name字段, person/10/name
要操作person表中的所有记录,可以构建这样的路径:/person
要操作xxx表中的记录,可以构建这样的路径:/xxx
UriMatcher: 用于解析和匹配Uri,它的用法如下:
1)注册需要匹配的Uri路径以及返回的匹配码
2)对传入的Uri进行解析
ContentUris: 用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
1)withAppendedId(uri, id)用于为路径加上ID部分:
2)parseId(uri)方法用于从路径中获取ID部分: