通过ContemtProvider对android联系人实现增删改查
2016-02-14 20:02
531 查看
思路:
通过android提供的联系人相关的ContentProvider,通过提供的专门的url,来实现相关的增删改查。
准备工作:
Android的联系人是以sqlite数据库的形式存储在手机内部存储/data/data/com.android.providers.contacts/contacts2.ab中。
我们可以直接使用Android已经为我们提供的url来获取对联系人信息的操作权限。URL:ContactsContract.Contacts.CONTENT_URI
我们通过ContentResolver类获取ContentProvider提供的联系人数据。context里的getContentResolver()方法可以获得这个类。
相关代码:
通过android提供的联系人相关的ContentProvider,通过提供的专门的url,来实现相关的增删改查。
准备工作:
Android的联系人是以sqlite数据库的形式存储在手机内部存储/data/data/com.android.providers.contacts/contacts2.ab中。
我们可以直接使用Android已经为我们提供的url来获取对联系人信息的操作权限。URL:ContactsContract.Contacts.CONTENT_URI
我们通过ContentResolver类获取ContentProvider提供的联系人数据。context里的getContentResolver()方法可以获得这个类。
相关代码:
public static List<contact> getAllContacts(Context context) { List<contact> list=new ArrayList<contact>(); //利用系统的ContentProvider来查询联系人信息 //数据来自contacts,data表 ContentResolver cr = context.getContentResolver(); String[] projection = new String[]{ContactsContract.Contacts._ID,ContactsContract.Contacts.PHOTO_ID}; Cursor c= cr.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, null); //遍历从contacts数据表中取出的数据集 while(c.moveToNext()){ Contact contact = new Contact(); int id = c.getInt(0); contact.set_id(id); contact.setPhoto_id(c.getInt(1)); //利用联系人的_id,到data数据表中继续查询 ContentResolver cr2 = context.getContentResolver(); Cursor c2 = cr2.query( ContactsContract.Data.CONTENT_URI, new String[]{Data.MIMETYPE,Data.DATA1}, Data.RAW_CONTACT_ID+" = ?", new String[]{String.valueOf(id)}, null); //从从data表中取回的,特定id联系人的具体数据集 while(c2.moveToNext()){ String mimeType = c2.getString(0); if(mimeType.equals("vnd.android.cursor.item/email_v2")){ contact.setEmail(c2.getString(1)); } if(mimeType.equals("vnd.android.cursor.item/name")){ contact.setName(c2.getString(1)); } if(mimeType.equals("vnd.android.cursor.item/phone_v2")){ contact.setPhone(c2.getString(1)); } if(mimeType.equals("vnd.android.cursor.item/postal-address_v2")){ contact.setAddress(c2.getString(1)); } } c2.close(); //对于只有号码没有姓名的联系人做一个处理 if(TextUtils.isEmpty(contact.getName())){ contact.setName(contact.getPhone()); } list.add(contact); } c.close(); return list; } 这样就把联系人查到,赋值给实体类,保存到list集合里面。</contact></contact></contact>
相关文章推荐
- Android 第十天
- [Android]Ultra-Pull-To-Refresh之listview下拉刷新、上拉加载的用例-已更新
- [置顶] android实现防美拍点赞效果
- Android 的性能 IV-多线程的性能
- 在AndroidManifest.xml配置BroadcastReceiver的接收者时注意事项
- android 监听系统时区变化,日期变化,时间变化
- AndroidPn项目实现推送的使用过程
- Android 任务栈、Intent.FlAG_ACTIVITY_xxx、Activity四种启动模式
- android gridview画分割线
- Android检测手机系统版本号、手机品牌工具类
- Android系统流程
- android pull 解析xml文件
- Android自己定义控件(状态提示图表)
- android笔记(1)
- android中checkbox文字和复选框的间距设置问题
- 优化 Android 线程和后台任务开发
- Android Studio项目结构和Gradle应用
- Android 5.0 Camera (3):open camera
- android View事件机制分析(一)
- 浅谈Android系统的基本体系结构与内存管理优化