利用ContentProvider获取联系人列表

来源:互联网 发布:qq tim 知乎 编辑:程序博客网 时间:2024/05/18 01:45

最近学习了Android四大组件之一的ContentProvider,Android系统通过ContentProvider为应用程序之间共享数据提供了统一的接口。

Android已经为常见的一些数据提供了默认的ContentProvider。手机里面的联系人信息是以sqlite数据表的形式存储在系统的数据库中的,所以我们若要取到系统的联系人,就得依托于这个类。我们通过一个uri就可以获得这个数据库的一些操作方法,从而对联系人进行增删改查。


有的系统提供的uri,当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,来操作数据。

public static List<Contact> getAllContact(Context context) {List<Contact>list=new ArrayList<Contact>();//利用系统的ContactProvider来查询联系人信息//数据来自contacts,data表ContentResolver cr = context.getContentResolver();String[]projection =new String[]{ContactsContract.Contacts._ID,ContactsContract.Contacts.PHOTO_ID};Cursor cursor=cr.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, null);//遍历从contacts数据表中的数据集while(cursor.moveToNext()){Contact contact=new Contact();contact.set_id(cursor.getInt(0));contact.setPhoto_id(cursor.getInt(1));//利用联系人的_id,到Data表中继续查询ContentResolver cr2=context.getContentResolver();Cursor cursor2=cr2.query(ContactsContract.Data.CONTENT_URI,new String[]{Data.MIMETYPE,Data.DATA1},Data.RAW_CONTACT_ID+"=?", new String[]{String.valueOf(contact.get_id())},null);//从data表中取回的,特定id联系人的具体数据while(cursor2.moveToNext()){String mimeTypeString=cursor2.getString(0);if (mimeTypeString.equals("vnd.android.cursor.item/email_v2")) {contact.setEmail(cursor2.getString(1));}if (mimeTypeString.equals("vnd.android.cursor.item/name")) {contact.setName(cursor2.getString(1));}if (mimeTypeString.equals("vnd.android.cursor.item/phone_v2")) {contact.setPhone(cursor2.getString(1));}if (mimeTypeString.equals("vnd.android.cursor.item/postal-address_v2")) {contact.setAddress(cursor2.getString(1));}if (mimeTypeString.equals("vnd.android.cursor.item/photo")) {//contact.setPhoto_id(cursor2.getInt(1));//int photo=contact.get_id();//long i=photo;/*InputStream input=ContactsContract.Contacts.openContactPhotoInputStream(cr2,ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,(long)contact.get_id()//Long.parseLong(String.valueOf(contact.getPhoto_id()))//photo));contact.setPhotoBitmap(BitmapFactory.decodeStream(input));*/}}cursor2.close();if (TextUtils.isEmpty(contact.getName())) {contact.setName(contact.getPhone());}list.add(contact);}cursor.close();return list;}


0 0
原创粉丝点击