乐读文学

Android从入门到精通

乐读文学 > 科普学习 > Android从入门到精通

第127页

书籍名:《Android从入门到精通》    作者:明日科技






10.5 实践与练习

1.  编写Android项目,使用MediaPlayer和SurfaceView实现带音量控制的视频播放器。(答案位置:光盘\TM\sl\10\10.10)

2.  编写Android项目,实现控制是否播放按键音。(答案位置:光盘\TM\sl\10\10.11)





第11章 ContentProvider实现数据共享

(  教学录像:42分钟)

Content  Provider用于保存和获取数据,并使其对所有应用程序可见。这是不同应用程序间共享数据的唯一方式,因为在Android中没有提供所有应用共同访问的公共存储区域。本章将介绍如何使用预定义和自定义Content  Provider。

通过阅读本章,您可以:

★  了解Content  Provider的基本概念



★  掌握Content  Provider的常用方法



★  了解系统预定义的Content  Provider



★  了解如何自定义Content  Provider





11.1 Content  Provider概述

教学录像:光盘\TM\lx\11\  Content  Provider概述.exe

Content  Provider内部如何保存数据由其设计者决定,但是所有的Content  Provider都实现一组通用的方法,用来提供数据的增、删、改、查功能。

客户端通常不会直接使用这些方法,大多数是通过ContentResolver对象实现对Content  Provider的操作。开发人员可以通过调用Activity或者其他应用程序组件的实现类中的getContentResolver()方法来获得ContentProvider对象,例如:

ContentResolver  cr  =  getContentResolver();

使用ContentResolver提供的方法可以获得Content  Provider中任何感兴趣的数据。

当开始查询时,Android系统确认查询的目标Content  Provider并确保它正在运行。系统会初始化所有ContentProvider类的对象,开发人员不必完成此类操作,实际上,开发人员根本不会直接使用ContentProvider类的对象。通常,每个类型的ContentProvider仅有一个单独的实例。但是该实例能与位于不同应用程序和进程的多个ContentResolver类对象通信。不同进程之间的通信由ContentProvider类和ContentResolver类处理。

11.1.1 数据模型

Content  Provider使用基于数据库模型的简单表格来提供其中的数据,这里每行代表一条记录,每列代表特定类型和含义的数据。例如,联系人的信息可能以如表11.1所示的方式提供。

表11.1 联系方式





_ID  NAME  NUMBER  EMAIL

001  张××  123*****  123**@163

002  王××  132*****  132**@google

003  李××  312*****  312**@qq

004  赵××  321*****  321**@126

每条记录包含一个数值型的_ID字段,用于在表格中唯一标识该记录。ID能用于匹配相关表格中的记录,例如,在一个表格中查询联系人的电话,在另一表格中查询其照片。

注意:  ID字段前还包含了一条下划线,在编写代码时不要忘记。

查询返回一个Cursor对象,它能遍历各行各列来读取各个字段的值。对于各个类型的数据,它都提供了专用的方法。因此,为了读取字段的数据,开发人员必须知道当前字段包含的数据类型。

11.1.2 URI的用法

每个Content  Provider提供公共的URI(使用Uri类包装)来唯一标识其数据集。管理多个数据集(多个表格)的Content  Provider为每个数据集提供了单独的URI。所有为provider提供的URI都以“content://”作为前缀,“content://”模式表示数据由Content  Provider来管理。

如果自定义Content  Provider,则应该为其URI也定义一个常量,来简化客户端代码并让日后更新更加简洁。Android为当前平台提供的Content  Provider定义了CONTENT_URI常量。例如,匹配电话号码到联系人表格的URI和匹配保存联系人照片表格的URI分别如下:

android.provider.Contacts.Phones.CONTENT_URI



android.provider.Contacts.Photos.CONTENT_URI

URI常量用于所有与Content  Provider的交互中。每个ContentResolver方法使用URI作为其第一个参数。它标识ContentResolver应该使用哪个provider及其中的哪个表格。

下面是Content  URI重要部分的总结:



[√]A:标准的前缀,用于标识该数据由Content  Provider管理,不需修改。



[√]B:URI的authority部分,用于标识该Content  Provider。对于第三方应用,该部分应该是完整的类名(使用小写形式)来保证唯一性。在元素的authorities属性中声明authority。



[√]C:Content  Provider的路径部分,用于决定哪类数据被请求。如果Content  Provider仅提供一种数据类型,可以省略该部分;如果provider提供几种类型,包括子类型,这部分可以由几部分组成。



[√]D:被请求的特定记录的ID值。这是被请求记录的_ID值。如果请求不仅限于单条记录,该部分及其前面的斜线应该删除。





11.2 预定义Content  Provider

教学录像:光盘\TM\lx\11\  预定义Content  Provider.exe

Android系统为常用数据类型提供了很多预定义的Content  Provider(声音、视频、图片、联系人等),它们大多位于android.provider包中。开发人员可以查询这些provider以获得其中包含的信息(尽管有些需要适当的权限来读取数据)。Android系统提供的常见Content  Provider说明如下。

[√]Browser:读取或修改书签、浏览历史或网络搜索。



[√]CallLog:查看或更新通话历史。



[√]Contacts:获取、修改或保存联系人信息。



[√]LiveFolders:由Content  Provider提供内容的特定文件夹。



[√]MediaStore:访问声音、视频和图片。



[√]Setting:查看和获取蓝牙设置、铃声和其他设备偏好。



[√]SyncStateContract:用于使用数据数组账号关联数据的ContentProvider约束。希望使用标准方式保存数据的provider时可以使用。



[√]UserDictionary:在可预测文本输入时,提供用户定义单词给输入法使用。应用程序和输入法能增加数据到该字典。单词能关联频率信息和本地化信息。