zoukankan      html  css  js  c++  java
  • 实例教程十一:访问通信录中的联系人和添加联系人

    Android《五子连珠》游戏完整源码分享

    http://www.eoeandroid.com/thread-211877-1-1.html 

    android仿酷狗播放器

    http://www.eoeandroid.com/thread-185894-1-1.html

    自制K线图,新鲜出炉

    http://www.eoeandroid.com/thread-182290-1-1.html

    package cn.itcast.contacts;
    
    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";
    
            /**
             * 获取 所有联系人
             * @throws Exception
             */
            public void testContacts() throws Exception{
                    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 contactId = cursor.getInt(0);
                            StringBuilder sBuilder = new StringBuilder("contactId=");
                            sBuilder.append(contactId);
    
                            uri = Uri.parse("content://com.android.contacts/contacts" + contactId + "/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("data2"));
                                    if("vnd.android.cursor.item/name".equals(type)){ //姓名
                                            sBuilder.append(", name=" + data);
                                    }else if("vnd.android.cursor.item/email_v2".equals(type)){ //email
                                            sBuilder.append(", email=" + data);
                                    }else if("vnd.android.cursor.item/phone_v2".equals(type)){ //phone
                                            sBuilder.append(", phone=" + data);
                                    }
                            }
                            Log.i(TAG, sBuilder.toString());
                    }
            }
    
            /**
             * 根据号码获取联系人的姓名
             * @throws Exception
             */
            public void testContactNameByPhoneNumber() throws Exception{
                    String pNumber = "18012345678";
                    Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + pNumber);
                    ContentResolver resolver = getContext().getContentResolver();
                    Cursor cursor = resolver.query(uri, new String[]{"display_name"}, null, null, null);
                    //为何使用moveToFirst()?
                    //因为查找的数据只有一条,那一开始肯定就有一条
                    if(cursor.moveToFirst()){
                            String name = cursor.getString(0);
                            Log.i(TAG, name);
                    }
                    cursor.close();
            }
    
            /**
             * 添加联系人
             * @throws Exception
             */
            public void testAddContact() throws Exception{
                    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));
                    //添加姓名
                    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", "13671325874");
                    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", "123@qq.com");
                    resolver.insert(uri, values);
            }
    
            /**
             * 在同一事务中完成 联系人各项数据的添加
             * @throws Exception
             */
            public void testAddContact2() throws Exception{
                    Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
                    ContentResolver resolver = getContext().getContentResolver();
                    ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
                    ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)
                    .withValue("account_name", null)
                    .build();                
                    operations.add(op1);
    
                    uri = Uri.parse("content://com.android.contacts/data");
                    //添加姓名
                    //0--使用第一操作对象 添加完记录后所返回的ID
                    ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)
                    .withValueBackReference("raw_contact_id", 0)
                    .withValue("mimetype", "vnd.android.cursor.item/name")
                    .withValue("data2", "张三")
                    .build();                
                    operations.add(op2);
    
                    ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri)
                    .withValueBackReference("raw_contact_id", 0)
                    .withValue("mimetype", "vnd.android.cursor.item/phone_v2")
                    .withValue("data1", "13671325874")
                    .withValue("data2", "2")                
                    .build();                
                    operations.add(op3);
                    
                    ContentProviderOperation op4 = ContentProviderOperation.newInsert(uri)
                    .withValueBackReference("raw_contact_id", 0)
                    .withValue("mimetype", "vnd.android.cursor.item/email_v2")
                    .withValue("data1", "123@qq.com")
                    .withValue("data2", "2")                
                    .build();                
                    operations.add(op4);
    
                    resolver.applyBatch("com.android.contacts", operations);
                    //applyBatch运行流程
                    //{
                    //        begin();
                    //        for(op: operations){
                    //                op.app()
                    //        }
                    //        end();
                    //}
            }
    }
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="cn.itcast.contacts"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk android:minSdkVersion="8" />
    
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <uses-library android:name="android.test.runner" />
        </application>
    
        <instrumentation
            android:name="android.test.InstrumentationTestRunner"
            android:label="Tests for My App"
            android:targetPackage="cn.itcast.contacts" >
        </instrumentation>
        
        <uses-permission android:name="android.permission.READ_CONTACTS"/>
        <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
        <uses-permission android:name="android.permission.READ_CONTACTS"/>
    
    </manifest>
  • 相关阅读:
    问题14:如何拆分含有多种分隔符的字符串
    问题15:如何判断字符串a是否以字符串b开头或结尾
    问题16:如何调整字符串中文本的格式
    第三方支付公司之快钱
    js实现回调功能实例
    oracle查看未提交事务
    Tomcat错误之java.lang.OutOfMemoryError:PermGen space解决方案
    oracle错误之未知的命令开头imp忽略了剩余行解决方案
    修改easyui日期控件只显示年月,并且只能选择年月
    数据库三范式大总结
  • 原文地址:https://www.cnblogs.com/vus520/p/2749359.html
Copyright © 2011-2022 走看看