您的位置:首页 > 移动开发 > Android开发

添加联系人至通讯录

2016-07-13 13:14 399 查看
Android中通讯录使用ContentProvider实现

Android中通讯录界面是使用一个App

存储内容使用的是另一个App

需要的权限:

[html] view
plain copy

 





<uses-permission android:name="android.permission.READ_CONTACTS"/><!-- 读取通讯录权限 -->  

<uses-permission android:name="android.permission.WRITE_CONTACTS"/><!-- 写入通讯录权限 -->  

还有junit单元测试的权限等配置,这里不写了。

单元测试类:

[java] view
plain copy

 





package com.example.test;  

  

import java.util.ArrayList;  

  

import android.content.ContentProviderOperation;  

import android.content.ContentResolver;  

import android.content.ContentUris;  

import android.content.ContentValues;  

import android.database.Cursor;  

import android.net.Uri;  

import android.test.AndroidTestCase;  

import android.util.Log;  

  

public class ContactsTest extends AndroidTestCase {  

    private static final String TAG = "ContactsTest";  

  

    /** 

     * 获取联系人 

     * */  

    public void testGetContacts(){  

        Uri uri = Uri.parse("content://com.android.contacts/contacts"); // 访问所有联系人  

        ContentResolver resolver = getContext().getContentResolver();  

        Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null);  

        while(cursor.moveToNext()){  

            int contactsId = cursor.getInt(0);  

            StringBuilder sb = new StringBuilder("contactsId=");  

            sb.append(contactsId);  

            uri = Uri.parse("content://com.android.contacts/contacts/" + contactsId + "/data"); //某个联系人下面的所有数据  

            Cursor dataCursor = resolver.query(uri, new String[]{"mimetype", "data1", "data2"}, null, null, null);  

            while(dataCursor.moveToNext()){  

                String data = dataCursor.getString(dataCursor.getColumnIndex("data1"));  

                String type = dataCursor.getString(dataCursor.getColumnIndex("mimetype"));  

                if("vnd.android.cursor.item/name".equals(type)){    // 如果他的mimetype类型是name  

                    sb.append(", name=" + data);  

                } else if("vnd.android.cursor.item/email_v2".equals(type)){ // 如果他的mimetype类型是email  

                    sb.append(", email=" + data);  

                } else if("vnd.android.cursor.item/phone_v2".equals(type)){ // 如果他的mimetype类型是phone  

                    sb.append(", phone=" + data);  

                }   

            }  

            Log.i(TAG, sb.toString());  

        }  

    }  

      

    /** 

     * 根据来电号码获取联系人名字 

     * */  

    public void testGetContactsByNumber(){  

        String number = "15292328801";  

        Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number);  

        ContentResolver resolver = getContext().getContentResolver();  

        Cursor cursor = resolver.query(uri, new String[]{"display_name"}, null, null, null);  

        if(cursor.moveToFirst()){  

            String name = cursor.getString(0);  

            Log.i(TAG, name);  

        }  

    }  

      

    /** 

     * 添加联系人 

     * 数据一个表一个表的添加,每次都调用insert方法 

     * */  

    public void testAddContacts(){  

        /* 往 raw_contacts 中添加数据,并获取添加的id号*/  

        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");  

        ContentResolver resolver = getContext().getContentResolver();  

        ContentValues values = new ContentValues();  

        long contactId = ContentUris.parseId(resolver.insert(uri, values));  

          

        /* 往 data 中添加数据(要根据前面获取的id号) */  

        // 添加姓名  

        uri = Uri.parse("content://com.android.contacts/data");  

        values.put("raw_contact_id", contactId);  

        values.put("mimetype", "vnd.android.cursor.item/name");  

        values.put("data2", "周国平");  

        resolver.insert(uri, values);  

          

        // 添加电话  

        values.clear();  

        values.put("raw_contact_id", contactId);  

        values.put("mimetype", "vnd.android.cursor.item/phone_v2");  

        values.put("data2", "2");  

        values.put("data1", "15099144117");  

        resolver.insert(uri, values);  

          

        // 添加Email  

        values.clear();  

        values.put("raw_contact_id", contactId);  

        values.put("mimetype", "vnd.android.cursor.item/email_v2");  

        values.put("data2", "2");  

        values.put("data1", "zhouguoping@qq.com");  

        resolver.insert(uri, values);  

    }  

      

    /** 

     * 添加联系人 

     * 在同一个事务中完成联系人各项数据的添加 

     * 使用ArrayList<ContentProviderOperation>,把每步操作放在它的对象中执行 

     * */  

    public void testAddContacts2(){  

        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");  

        ContentResolver resolver = getContext().getContentResolver();  

        // 第一个参数:内容提供者的主机名  

        // 第二个参数:要执行的操作  

        ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();  

          

        // 操作1.添加Google账号,这里值为null,表示不添加  

        ContentProviderOperation operation = ContentProviderOperation.newInsert(uri)  

                .withValue("account_name", null)// account_name:Google账号  

                .build();  

          

        // 操作2.添加data表中name字段  

        uri = Uri.parse("content://com.android.contacts/data");  

        ContentProviderOperation operation2 = ContentProviderOperation.newInsert(uri)  

                // 第二个参数int previousResult:表示上一个操作的位于operations的第0个索引,  

                // 所以能够将上一个操作返回的raw_contact_id作为该方法的参数  

                .withValueBackReference("raw_contact_id", 0)  

                .withValue("mimetype", "vnd.android.cursor.item/name")  

                .withValue("data2", "周国平")  

                .build();  

          

        // 操作3.添加data表中phone字段  

        uri = Uri.parse("content://com.android.contacts/data");  

        ContentProviderOperation operation3 = ContentProviderOperation.newInsert(uri)  

                .withValueBackReference("raw_contact_id", 0)  

                .withValue("mimetype", "vnd.android.cursor.item/phone_v2")  

                .withValue("data2", "2")  

                .withValue("data1", "15099144117")  

                .build();  

          

        // 操作4.添加data表中的Email字段  

        uri = Uri.parse("content://com.android.contacts/data");  

        ContentProviderOperation operation4 = ContentProviderOperation  

                .newInsert(uri).withValueBackReference("raw_contact_id", 0)  

                .withValue("mimetype", "vnd.android.cursor.item/email_v2")  

                .withValue("data2", "2")  

                .withValue("data1", "zhouguoping@qq.com").build();  

          

        operations.add(operation);  

        operations.add(operation2);  

        operations.add(operation3);  

        operations.add(operation4);  

          

        try {  

            resolver.applyBatch("com.android.contacts", operations);  

        } catch (Exception e) {  

            e.printStackTrace();  

        }   

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android 添加联系人