如何获取手机联系人 ContentResoverContacts

package com.SmalTown.day15_contentresovercontacts;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {

    /**
     * 演示通过conentresolver访问系统的联系人
     *
     * ContactsContract.Contacts.CONTENT_URI 管理联系人的Uri
     * content://com.android.contacts/raw_contacts
     *
     * ContactsContract.CommonDataKinds.Phone.CONTENT_URI 管理联系人的电话的Uri
     * content://com.android.contacts/data/phones
     *
     * ContactsContract.CommonDataKinds.Email.CONTENT_URI 管理联系人的Email的Uri
     * content://com.android.contacts/data/emails
     *
     * android.provider.ContactsContract.Data.CONTENT_URI 插入联系人
     * content://com.android.contacts/data
     */

    private ListView lv;

    private ContentResolver resolver;
    private List<Map<String, Object>> list;
    
    private Uri contactsUri = ContactsContract.Contacts.CONTENT_URI;//联系人Uri对象
    
    private Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;//管理联系人电话的Uri
    
    private Uri emailUri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;//管理联系人邮箱的Uri
    
    private Uri doUri = android.provider.ContactsContract.Data.CONTENT_URI;//插入联系人
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv = (ListView) findViewById(R.id.lv);
        
        list = new ArrayList<Map<String,Object>>();

        resolver = getContentResolver();
        Cursor cursor = resolver.query(contactsUri, null, null, null, null);
        
        list = getData(cursor);

        SimpleAdapter adapter = new SimpleAdapter(MainActivity.this, list,
                R.layout.item,
                new String[]{ContactsContract.Contacts.DISPLAY_NAME,
                "phone",ContactsContract.CommonDataKinds.Email.DATA},
                new int[]{R.id.tv_name,R.id.tv_phone,R.id.tv_email});

        lv.setAdapter(adapter);
    }
    
    
    
    public void onclickBtn(View v){
        switch (v.getId()) {
        case R.id.btn_add://添加数据
            InsertData();
            break;
        case R.id.btn_update://修改数据
            UpdateData();
            break;
        case R.id.btn_delete://删除数据
            DeleteData();
            break;

        default:
            break;
        }
    }
    //删除数据
    public void DeleteData(){
        int flag = resolver.delete(RawContacts.CONTENT_URI, "display_name = ?", new String[]{"zhangsan"});
        if(flag>0){
            Toast.makeText(MainActivity.this, "删除成功", 0).show();
        }else{
            Toast.makeText(MainActivity.this, "删除失败", 0).show();
        }
    
    }
    
    //修改数据
    public void UpdateData(){
        ContentValues values = new ContentValues();
        values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "119911");
        //更改的操作
        int flag = resolver.update(doUri, values,
                ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID + "=?and mimetype_id=?",
                new String[]{"1","5"});
//        int flag = resolver.update(doUri, values, Data.RAW_CONTACT_ID+"=?", new String[]{1+""});
        //int flag = resolver.update(RawContacts.CONTENT_URI, values, Data.RAW_CONTACT_ID+"=?", new String[]{1+""});
        if(flag>0){
            Toast.makeText(MainActivity.this, "修改成功", 0).show();
        }else{
            Toast.makeText(MainActivity.this, "修改失败", 0).show();
        }
        
    }
    
    //添加数据
    public void InsertData(){
        
        //插入一条空的数据  为了得到id
        ContentValues values = new ContentValues();
        Uri newUri = resolver.insert(RawContacts.CONTENT_URI, values);
        long contactsId  = ContentUris.parseId(newUri);
        
        //插入联系人名称
        values = new ContentValues();
        values.put(Data.RAW_CONTACT_ID, contactsId);
        //存储的数据类型   联系人类型
        values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
        //插入名称
        values.put(StructuredName.DISPLAY_NAME, "zhangsan");
        resolver.insert(doUri, values);
        
        //插入电话号
        values = new ContentValues();
        values.put(Data.RAW_CONTACT_ID, contactsId);
        //插入电话号的数据类型
        values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
        values.put(Phone.NUMBER, "123456");
        resolver.insert(doUri, values);
        
        //插入邮储
        values = new ContentValues();
        values.put(Data.RAW_CONTACT_ID, contactsId);
        //插入邮箱的数据类型
        values.put(Data.MIMETYPE,Email.CONTENT_ITEM_TYPE);
        values.put(Email.DATA, "123456@qq.com");
        resolver.insert(doUri, values);
    
        
        
        
    }
    
    
    
    /**
     * 得到联系人数据
     * @param cursor
     * @return
     */
    public List<Map<String, Object>>  getData(Cursor cursor){
        List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();
        
        while(cursor.moveToNext()){
            Map<String, Object> map = new HashMap<String, Object>();
            //获取联系人数的id 和名称
            int contactsId = cursor.getInt(
                    cursor.getColumnIndex(ContactsContract.Contacts._ID));
            
            String contactsName = cursor.getString(
                    cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            
            map.put(ContactsContract.Contacts._ID, contactsId);
            map.put(ContactsContract.Contacts.DISPLAY_NAME, contactsName);
            //查询电话号
            Cursor phoneCursor = resolver.query(phoneUri, null,
                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?",
                    new String[]{contactsId+""}, null);
            while(phoneCursor.moveToNext()){
                
                String phone = phoneCursor.getString(
                                    phoneCursor.getColumnIndex(
                                            ContactsContract.CommonDataKinds.Phone.NUMBER));
                map.put("phone", phone);
            }
            phoneCursor.close();
            //查询邮箱
            Cursor emailCursor = resolver.query(emailUri, null,
                    ContactsContract.CommonDataKinds.Email.CONTACT_ID+"=?",
                    new String[]{contactsId+""}, null);
            while(emailCursor.moveToNext()){
                String email = emailCursor.getString(
                        emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                map.put(ContactsContract.CommonDataKinds.Email.DATA, email);
            }
            emailCursor.close();
            
            list.add(map);
        }
        
        cursor.close();
        return list;
        
    }

}









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值