Android ContentProvider(类容提供者)之操作通讯录联系人 添加查询联系人

本文介绍了如何使用Android的ContentProvider来操作通讯录。首先,需要了解系统的通讯录ContentProvider的清单内容和唯一标识,接着获取业务路径,然后通过这些信息来操作通讯录ContentProvider。内容包括查看源代码获取ContentProvider信息,定义操作类ContactsService和联系人数据类ContactText,以及测试类ContactsActivity的实现。最后展示了实现后的Activity界面XML和实际效果。
摘要由CSDN通过智能技术生成

Android系统一般自带有:电话,邮件,浏览器功能;在电话通讯录及通信记录,均是以ContentProvider的形式向外来应用共享,所以我们要访问和操作通讯录,就需要通过ContentProvider实现。

操作通讯录:逻辑
- 首先需要知道Android系统的通讯录ContentProvider清单类容
- 然后获得其唯一标示
- 再然后去获得通讯录ContentProvider的业务路径
- 最后去操作通讯录的ContentProvider

查看Android自带电话通讯录源代码,得到ContentProvider如下:

这里写图片描述

查看Android自带电话通讯录源代码,得到通讯录ContentProvider业务路径如下:

这里写图片描述

查看Android自带电话通讯录源代码,得到通讯录ContentProvider共享表格内容类型如下:

这里写图片描述
类容类型目录表
这里写图片描述

操作类的ContactsService代码:

package com.example.administrator.foundationdemo.contactsprovider.contactsservice;

import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.OperationApplicationException;
import android.database.Cursor;
import android.net.Uri;
import android.os.RemoteException;
import android.util.Log;

import com.example.administrator.foundationdemo.contactsprovider.domain.ContactText;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/12/20.
 */
public class ContactsService {
    private Context context;
    public ContactsService(Context context){
        this.context = context;
    }

    //获取所有联系人
    public List<ContactText> visitContacts(){
        List<ContactText> list = new ArrayList<ContactText>();
        Uri uri = Uri.parse("content://com.android.contacts/contacts");//所有联系人的工作路径
        ContentResolver resolver = context.getContentResolver();
        Cursor cursor = resolver.query(uri, new String[]{
  "_id"}, null, null, null);//获取所有联系人的ID
        while (cursor.moveToNext()){
            ContactText conract = new ContactText();
            int contactcId = cursor.getInt(0);
            uri = Uri.parse("content://com.android.contacts/contacts/" + contactcId + "/data");//某一个联系人工作路径
            Cursor dateCursor = resolver.query(uri, new String[]{
  "mimetype","data1","data2"}, null, null, null);//获取某一个联系人的信息
            while (dateCursor.moveToNext()){
                String date = dateCursor.getString(dateCursor.getColumnIndex("data1"));//信息
                String type = dateCursor.getString(dateCursor.getColumnIndex("mimetype"));//内容类型
  
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值