Android访问通讯录和添加联系人

简介:
    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();  
            }   
        }  
    }  

目录
相关文章
|
7月前
|
网络协议 关系型数据库 MySQL
如何在Android Termux上安装MySQL并实现公网远程访问?
如何在Android Termux上安装MySQL并实现公网远程访问?
132 0
|
7月前
|
Android开发
Android网络访问超时
Android网络访问超时
57 2
|
4月前
|
XML 安全 Android开发
Flutter配置Android和IOS允许http访问
Flutter配置Android和IOS允许http访问
142 3
|
7月前
|
Android开发
【苹果安卓通用】xlsx 和 vCard 文件转换器,txt转vCard文件格式,CSV转 vCard格式,如何批量号码导入手机通讯录,一篇文章说全
本文介绍了如何快速将批量号码导入手机通讯录,适用于企业客户管理、营销团队、活动组织、团队协作和新员工入职等场景。步骤包括:1) 下载软件,提供腾讯云盘和百度网盘链接;2) 打开软件,复制粘贴号码并进行加载预览和制作文件;3) 将制作好的文件通过QQ或微信发送至手机,然后按苹果、安卓或鸿蒙系统的指示导入。整个过程简便快捷,可在1分钟内完成。
164 6
|
7月前
|
Android开发
【通讯录教程】苹果安卓鸿蒙系统通用,如何大批量导入手机号码到手机的通讯录,下面教你方法,只需1分钟搞定几万个号码的导入手机电话本
该文介绍了一种快速批量导入手机通讯录的方法,适用于处理大量手机号的需求,如微商管理、客户资料整理等。在QQ同步助手开始收费后,提供了免费的替代方案。步骤包括:下载批量导入软件(链接提供腾讯云盘和百度网盘地址),清空通讯录(非必需),制作符合格式的通讯录文件,并按操作系统(苹果、安卓或鸿蒙)进行导入。整个过程只需1分钟,简便快捷。
547 2
|
7月前
|
Java 开发工具 Android开发
如何访问 android系统hide的类或接口
如何访问 android系统hide的类或接口
299 1
|
7月前
|
存储 Java API
Android系统 文件访问权限笔记
Android系统 文件访问权限笔记
619 1
|
7月前
|
Android开发
Android通讯录开发之通讯录联系人搜索功能最新实现
Android通讯录开发之通讯录联系人搜索功能最新实现
|
7月前
|
XML Android开发 数据安全/隐私保护
android 11后文件读写访问权限申请
android 11后文件读写访问权限申请
266 0
|
7月前
|
运维 网络协议 Linux
Android 双网卡配置为连接到Android主机的PC提供外网访问(1)
Android 双网卡配置为连接到Android主机的PC提供外网访问(1)
313 0