1. 程式人生 > >Android訪問通訊錄和新增聯絡人

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", "
[email protected]
"); 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", "
[email protected]
").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訪問通訊錄新增聯絡人

package com.example.test; import java.util.ArrayList; import android.content.ContentProviderOperation;

如何向android手機通訊錄新增聯絡人

直接在手機的通訊錄的資料庫中新增列表 相關程式碼如下 package com.example.test; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import

android 獲取通訊錄中同一聯絡人的多個號碼

public static void fetchContact(Context context) { List<ContactsBean> list = new ArrayList<>(); ContentResolver cr = context.getC

iTop4412 android系統去掉新增apk

因為要裁剪系統,所以用了半天的時間研究刪除和新增apk進入android檔案系統。 環境:  系統:android4.03 開發板:4412 我這裡開發板使用的訊為的4412,android使用訊為提供的原始碼,但是原理是想通的。給的教程不算全面,有幾點沒有提到,有以下幾點

通訊錄新增聯絡人統計功能

packages/apps/Contacts/src/com/android/contacts/list/DefaultContactBrowseListFragment.java --- a/alps/packages/apps/Contacts/src/com/andr

android通訊錄中選擇聯絡人並讀取號碼

1.Manifest檔案中新增許可權配置: <uses-permission android:name="android.permission.WRITE_CONTACTS"/> <uses-permission android:name

下載Android手機通訊錄Listview實現A-Z排序(附原始碼)

本章實現的功能:從Android手機中得到通訊錄聯絡人的資料,並且實現A-Z排序和搜尋過濾 以下是在本人手機中除錯的效果圖 要實現此功能 1,通過ContentProvider知識點讀取Android手機中聯絡人資料 記得要在AndroidManifest.xml宣告許

Android HTTPS驗證新增http頭資訊token認證

SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme("http", PlainSocketFactory .getSocketFact

用C語言模擬實現一個通訊錄,要求實現其新增 刪除 修改 查詢 模糊搜尋姓名號碼 顯示排序聯絡人資訊的功能

                題目:用C語言模擬實現一個通訊錄,要求實現其新增、刪除、修改、查詢、模糊搜尋姓名和號碼、顯示和排序

Android 手機通訊錄開發時給聯絡人新增頭像失敗的坑

在給聯絡人新增頭像程式碼 Bitmap photo = ...; // 將 Bitmap 轉為 byte[] byte[] bytes = LshImageUtils.bitmap2Bytes(photo); // 新增聯絡人, 插入名字和頭像 (LshC

訪問通訊錄中的聯絡人和批量新增聯絡人

一、訪問通訊錄中的聯絡人(根據號碼查詢聯絡人)     主要用到資料庫(data\data\com.android.providers.contacts)中三張表,raw_contact、data、mimetypes.從第一張表獲取_id,根據_id從data表中查詢聯絡人

獲取android手機了通訊錄sim卡聯絡人

private ArrayList<SamContact> getAllContacts(){ArrayList<SamContact> arrayList = new ArrayList<SamContact>();//獲取本機聯絡人C

Stack Overflow:研究發現訪問PHP Android的流量更可能來自低收入國家

收入 數據科學家 網站 mar 訪問 adf 一個 avi span Stack Overflow 的數據科學家 David Robinson 發現,軟件行業的分工讓不同發達地區的程序員依賴於不同的編程語言。軟件已經是一個全球性的行業,也有高端低端之分,最高端的是數據科

Android實現側滑-新增資料toolbar等功能

首先是主程式碼塊 package alice.bw.com.day01zhoukao; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.Fra

Android系統編譯:新增OpenCV庫模型配置檔案

一、新增 libopencv_java3.so庫至/system/lib64/ 在Android原始碼目錄的hardware/libgesture/目錄下建立libopencvhw資料夾,並將libo

BufferKnife8.8.1Android ButterKnife Zelezny的新增與使用

BufferKnife主要是註解式開發,簡化開發人員開發速度,它的使用非常簡單,容易上手,下面來看看它的簡單使用吧。最新版本8.8.1,其實都差不多步驟:(使用AndroidStudio)找到專案內的build.gradle檔案dependencies {}新增depende

(轉載)Android模擬器-Genymotion的下載新增Android虛擬系統

原地址:http://blog.csdn.net/fengshuiyue/article/details/50875210 Genymotion是一款模擬Android系統很不錯的軟體,其顯著的特點就是加快了Android系統的模擬速度,讓我們可以在電腦上體驗到使用手機

Android 內容訪問者 跳轉到通訊錄頁面獲取資訊

內容解析者ContentResolver 使用ContentResolver呼叫ContentProvider提供的介面,操作資料當外部應用需要對ContentProvider中的資料進行新增、刪除、修改和查詢操作時,可以使用ContentResolver 類來完成,

伺服器8080埠改為80埠(直接訪問網站不用新增專案名。)

新手教材。很多人購買伺服器和域名後,全部弄好後,只能通過   ip:8080/專案名   (或者     域名:8080/專案名 )的方式進行訪問。 這裡講解的就是如何去掉埠和專案名,直接用  ip (或者

Android-如何給View新增邊框,邊框顏色線的粗細可以自定義

一、使用場景 有時在開發中,遇到向表格形式的佈局,這時該怎麼辦? 如果只是簡單的一條橫線或者豎線,直接使用TextView控制元件,寬或者高固定1dp或者2dp,高或者寬match parent,在定義一個background="#FF0000",這樣就實現了單一的線條功能