关于Android中的ContntResolver
Android中有个ContentProvider(内容提供者)还有个ContentResolver(内容解析者)
简单的来说ContentProvider就是将自己App的数据库共享,使得其他App可以访问本App的数据,而ContentResolver就是用来访问其他App的数据库的,下面看一则实例
获取手机的联系人及头像
public static void getContactsInfo(Context context) {
//1. 获取内容解析者
ContentResolver contentResolver = context.getContentResolver();
// ContactsContract 联系人的API
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = new String[]{
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
};
//2.查询操作
//uri :查询地址
//projection :查询的数据字段名称
//selection :查询的条件 where id=..
//selectionArgs :查询条件的参数
//sortOrder :排序s
// contentResolver.query(uri, projection, selection, selectionArgs, sortOrder);
Cursor cursor = contentResolver.query(uri, projection, null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(0);
String number = cursor.getString(1);
int id = cursor.getInt(2);
Bitmap bitmap = getContactPhoto(context, id);
if (null == bitmap) {
Log.e("Contact", "id: " + id + " 头像不为空");
} else {
Log.e("Contact", "id: " + id + " 头像为空");
}
}
}
public static Bitmap getContactPhoto(Context context, int id) {
ContentResolver contentResolver = context.getContentResolver();
// Uri uri = ContactsContract.Contacts.CONTENT_URI;
//拼接路径
//http://www.baidu.com/jdk
//参数一:表的路径
//参数二:联系人具体的路径
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, id + "");
//获取联系人头像,以流的方式返回
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
if (is != null) {
try {
is.close();
is = null;
} catch (IOException e) {
e.printStackTrace();
}
}
return bitmap;
}
上面就是获取手机联系人的代码了,也是一个内容解析者的使用实例,如果大家需要获取手机中的联系人,只需要将上段代码拷贝过去就行了。
所要注意的是Url,Url使用来区分不同应用程序的。
关于ContactsContract这个类,由于Android的碎片化极其严重,各个手机品牌有不同的ROOM,这使得Android的软件开发不容易做适配,Google已经想到这一点了,定义了一个标准,所有的厂家都遵循这个标准,而对于我们开发者来说只需要使用这个Api就行了,而这个ContactsContract类就是Google用来适配的,通过这个类我们可以来获取手机中的联系人,而不用担心适配问题。