Android本地的Content Provider

   

Android暴露了许多Content Provider来访问本地的数据库。

 

你可以使用之前描述的技巧来使用本地的Content Provider。可变通的地方,android.provider类包含了一些便利的类来简化这些有用的Provider,包括:

 

Browser

使用Browser Content Provider可以用来读取或修改标签、浏览历史或者网络搜索。

 

CallLog

查看或更新电话历史,包括来电和去电、未接来电和电话细节,如联系人和通话时间。

 

Contacts

使用Contacts Provider可以用来读取、修改或保持联系人信息。

 

MediaStore

MediaStore提供了对设备上的多媒体文件的集中控制,包括音频、视频和图片。你可以在MediaStore中保存你自己的多媒体来让它可以全局访问。

 

Settings

你可以使用Settings Provider来访问设备的Preference。使用它,你可以查看和修改蓝牙设置、铃声和其它设备设定。

 

 

你应该尽可能地使用这些本地的Content Provider,来保证你的程序和本地或第三方程序之前无瑕疵的整合到一起。

 

介绍如何使用这些辅助类不在本章的范围,接下来的章节描述了如何使用其中的一些有用的、强大的本地Content Provider

 

使用MediaStore Provider

 

AndroidMediaStore提供了音频、视频和图片文件的管理仓库。当你添加一个新的多媒体文件到Android的文件系统时,你应该把它也添加到MediaStore中,来保证它能被其它的程序可见。

 

MediaStore类中包含了一些方便地方法来简化文件的插入。例如。接下来的代码片段显示了如何直接将一个文件插入到MediaStore中:

 

android.provider.MediaStore.Images.Media.insertImage(getContentResolver(),

sourceBitmap,“my_cat_pic”,“Photo of my cat!”);

 

使用Contacts Provider

 

在通讯设备上,对联系人管理器的访问是尤其重要的。Android在这点上,作出了正确的事情:对于授予了READ_CONTACTS权限的任何应用程序,都可以访问联系人数据库中的所有信息。

 

在接下来的例子,Activity获取联系人数据库中每个人的Cursor,创建一个字符串数组来保存每个联系人的名字和电话号码。

 

为了简化从Cursor上提取数据,Android提供了一些People类的静态属性来表示列名称。

 

// Get a cursor over every contact.

Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);

 

// Let the activity manage the cursor lifecycle.

startManagingCursor(cursor);

 

// Use the convenience properties to get the index of the columns

int nameIdx = cursor.getColumnIndexOrThrow(People.NAME);

int phoneIdx = cursor. getColumnIndexOrThrow(People.NUMBER);

String[] result = new String[cursor.getCount()];

if (cursor.moveToFirst())

do {

// Extract the name.

String name = cursor.getString(nameIdx);

 

// Extract the phone number.

String phone = cursor.getString(phoneIdx);

 

result[cursor.getPosition()] = name + “ (“ + phone + “)”;

} while(cursor.moveToNext());

 

为了运行这个代码片段,你需要给程序添加READ_CONTACTS权限。

 

和查询联系人数据库一样,你还可以使用这个Content Provider来修改、删除或插入联系人记录。

posted on 2009-08-10 10:23  xirihanlin  阅读(4723)  评论(0编辑  收藏  举报