zoukankan      html  css  js  c++  java
  • android16

    【通信录操作】

    使用ContentResolver对通信录中的数据进行添加、删除、修改和查询操作:
    加入读写联系人信息的权限
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />

      1 加入读取联系人信息的权限
      2 <uses-permission android:name="android.permission.READ_CONTACTS"/>
      3 
      4 content://com.android.contacts/contacts 操作的数据是联系人信息Uri
      5 content://com.android.contacts/data/phones 联系人电话Uri
      6 content://com.android.contacts/data/emails 联系人Email Uri
      7 
      8 读取联系人信息
      9 Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,  
     10     null, null, null, null);  
     11   while (cursor.moveToNext()) {  
     12    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));  
     13    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));  
     14    
     15    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,  
     16         null,  
     17         ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,  
     18         null, null);  
     19     while (phones.moveToNext()) {  
     20      String phoneNumber = phones.getString(phones.getColumnIndex(  
     21          ContactsContract.CommonDataKinds.Phone.NUMBER));  
     22      Log.i("RongActivity", "phoneNumber="+phoneNumber);
     23     }  
     24     phones.close();  
     25    
     26     Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,  
     27        null,  
     28        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,  
     29        null, null);  
     30        while (emails.moveToNext()) {  
     31         // This would allow you get several email addresses  
     32         String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
     33         Log.i("RongActivity", "emailAddress="+ emailAddress);
     34        }  
     35        emails.close();  
     36   }  
     37   cursor.close(); 
     38 
     39 ==================== 添加联系人 ===========================
     40 方法一:
     41     /**
     42      * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId 
     43      * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见
     44      */
     45     public void testInsert() {
     46         ContentValues values = new ContentValues();
     47         //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId 
     48         Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);
     49         long rawContactId = ContentUris.parseId(rawContactUri);
     50         //往data表入姓名数据
     51         values.clear();
     52         values.put(Data.RAW_CONTACT_ID, rawContactId); 
     53         values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型
     54         values.put(StructuredName.GIVEN_NAME, "李天山");
     55         this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
     56         //往data表入电话数据
     57         values.clear();
     58         values.put(Data.RAW_CONTACT_ID, rawContactId);
     59         values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
     60         values.put(Phone.NUMBER, "13921009789");
     61         values.put(Phone.TYPE, Phone.TYPE_MOBILE);
     62         this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
     63         //往data表入Email数据
     64         values.clear();
     65         values.put(Data.RAW_CONTACT_ID, rawContactId);
     66         values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
     67         values.put(Email.DATA, "liming@itcast.cn");
     68         values.put(Email.TYPE, Email.TYPE_WORK);
     69         this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
     70     }
     71 
     72 方法二:批量添加,处于同一个事务中
     73     public void testSave() throws Throwable{
     74         //文档位置:reference\android\provider\ContactsContract.RawContacts.html
     75         ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
     76         int rawContactInsertIndex = 0;
     77         ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
     78                 .withValue(RawContacts.ACCOUNT_TYPE, null)
     79                 .withValue(RawContacts.ACCOUNT_NAME, null)
     80                 .build());
     81         //文档位置:reference\android\provider\ContactsContract.Data.html
     82         ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
     83                 .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
     84                 .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
     85                 .withValue(StructuredName.GIVEN_NAME, "赵薇")
     86                 .build());
     87         ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
     88                  .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
     89                  .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
     90                  .withValue(Phone.NUMBER, "13671323809")
     91                  .withValue(Phone.TYPE, Phone.TYPE_MOBILE)
     92                  .withValue(Phone.LABEL, "手机号")
     93                  .build());
     94         ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
     95                  .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
     96                  .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
     97                  .withValue(Email.DATA, "liming@itcast.cn")
     98                  .withValue(Email.TYPE, Email.TYPE_WORK)
     99                  .build());
    100         ContentProviderResult[] results = this.getContext().getContentResolver()
    101             .applyBatch(ContactsContract.AUTHORITY, ops);
    102         for(ContentProviderResult result : results){
    103             Log.i(TAG, result.uri.toString());
    104         }
    105     }
    View Code
  • 相关阅读:
    将文件放到Android模拟器的SD卡中的两种解决方法
    Response JSON数据返回
    jAVA 得到Map价值
    【动态规划】leetcode
    思考互联网分布式系统
    Cocos2d-x数据持久-变更数据
    小程序猿都找到了工作经验的方式
    抄360于Launcher浮动窗口的屏幕显示内存使用情况(改进版)
    vb.net窗口继承(房重建知识汇总)
    Spring该讲座
  • 原文地址:https://www.cnblogs.com/Miami/p/3138922.html
Copyright © 2011-2022 走看看