ContentProvider实现数据共享 查询手机内置联系人

来源:互联网 发布:透视变换算法 编辑:程序博客网 时间:2024/04/30 06:47

Android系统中提供了很多预定义的Content Provider(声音,图片,视频,联系人等),开发人员可以通过查询这些provider以获得其中包含的信息。

Browser  读取或者需改书签
浏览历史或网络搜索CallLog查看和更新通话记录Contacts获取,修改或保存联系
人信息MediaStore 访问声音、视频、音乐Setting查看获取蓝牙设置、铃声等其他设置

在实际的操作中,我们通常不会直接对Content Provider直接进行操作,而是通过对ContentResolver对象进行操作,开发人员可以通过调用Activity或其他应用程序组件的实现类中的getContentResolver()方法来获得ContentProvider对象

ContentResolver cr = getContentResolver();

通过对cr的操作来实现数据的操作

1.查询

cr.query();

返回的对象为一个游标 cursor,它能遍历各行各列来读取各个字段的值。

2.增加

cr.insert();

传递provider的URL参数和ContentValues映射,该方法的返回新纪录的完整URL

3.更新

cr.update();

需要提供需要修改的列名、值

4.删除

cr.delete();

如果删除单行,可以调用ContentProvider.delete()方法并提供特定行的URL

如果删除多行,可以结合SQLWHERE语句进行操作。

例子:查询手机联系人的电话和姓名

在MainActivity中创建如下的方法,用于获取用户的数据信息

private String getQueryData(){

StringBuilder sb = new StringBuilder();//用于保存字符串

ContentResolver resolver = getContentResolver();//获得ContentResolver对象

Cursor cursor = resolver.query(Contacts.CONTENT_URL,null,ull,null,null);查询记录,参数为查询的条件等

while(cursor.moveToNext()){

int idIndex = cursor.getColumnIndex(Contacts._ID);//获取ID值的索引

int displayNameIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);//获取姓名索引

int id = cursor.getInt(idIndex);//获取id,通过索引获取相应的值

String name  = cursor.getString(displayNameIndex);

Cursor phone = resolver.query(Phone.CONTENT_URL,null,Phone.CONTENT._ID+"="+id,null,null);

while(phone.moveToNext()){

int phoneNumberIndex = phone.getColumnIndex(Phone.NUMBER);

String number = Phone.getString(phoneNumberIndex);

sb.append(name+":"+number+"\n");

}

}

cursor.close();

return sb.toString();

}



1 0
原创粉丝点击