1. 程式人生 > >android通訊錄開發 增刪改查(附Demo)

android通訊錄開發 增刪改查(附Demo)

不廢話,直接開擼

主要邏輯程式碼如下

單查詢/增加聯絡人

/**
     * 寫入手機聯絡人
     */
    private void writeContact() {
        String name = "test";
        String number = "13666668888";

        //先查詢要新增的號碼是否已存在通訊錄中, 不存在則新增. 存在則提示使用者
        Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number);
        ContentResolver resolver = getContentResolver();
//從raw_contact表中返回display_name Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data.DISPLAY_NAME}, null, null, null); if (cursor == null) return; if (cursor.moveToFirst()) { Log.i("nn", "name=" + cursor.getString(0)); Toast.makeText
(this, "存在相同號碼", Toast.LENGTH_SHORT).show(); } else { uri = Uri.parse("content://com.android.contacts/raw_contacts"); ContentValues values = new ContentValues(); long contact_id = ContentUris.parseId(resolver.insert(uri, values)); //插入data表 uri = Uri.parse
("content://com.android.contacts/data"); //add Name values.put("raw_contact_id", contact_id); values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/name"); values.put("data2", "qq"); values.put("data1", name); resolver.insert(uri, values); values.clear(); //add Phone values.put("raw_contact_id", contact_id); values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/phone_v2"); values.put("data2", "2"); //手機 values.put("data1", number); resolver.insert(uri, values); values.clear(); //add email values.put("raw_contact_id", contact_id); values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/email_v2"); values.put("data2", "1"); //郵箱 values.put("data1", "[email protected]"); resolver.insert(uri, values); values.clear(); //add organization values.put("raw_contact_id", contact_id); values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/organization"); values.put("data4", "產品經理"); //職務 values.put("data1", "騰訊科技"); //公司 resolver.insert(uri, values); values.clear(); Toast.makeText(this, "插入號碼成功", Toast.LENGTH_SHORT).show(); } cursor.close(); }

注意: 使用魅族手機測試得到一個有趣的結果, 如果query時傳入的只是一段短小的號碼, 比如: 13612 那麼會返回所有匹配包含到這各欄位的結果, 例如有兩個號碼分別是 13612 99 8888 / 139 13612 888 .
那麼最終查詢則會返回號碼存在的結果

刪除聯絡人

/**
     * 刪除聯絡人
     */
    private void deleteContact() {
        String name = "test";

        //根據姓名求id
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        ContentResolver resolver = getContentResolver();
        Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data._ID}, "display_name=?", new String[]{name}, null);
        if (cursor == null)
            return;

        if (cursor.moveToFirst()) {
            int id = cursor.getInt(0);
            //根據id刪除data中的相應資料
            resolver.delete(uri, "display_name=?", new String[]{name});
            uri = Uri.parse("content://com.android.contacts/data");
            resolver.delete(uri, "raw_contact_id=?", new String[]{id + ""});
            Toast.makeText(this, "刪除號碼成功", Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(this, "沒有找到號碼", Toast.LENGTH_SHORT).show();
        }
        cursor.close();
    }

更改聯絡人

/**
     * 更改聯絡人
     */
    private void changeContact(){
        String name = "test";
        String newPhone = "13644440000";
        //根據姓名求id
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        ContentResolver resolver = getContentResolver();
        Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data._ID}, "display_name=?", new String[]{name}, null);
        if (cursor == null)
            return;

        if (cursor.moveToFirst()) {
            int id = cursor.getInt(0);
            ContentValues values = new ContentValues();
            values.put("data1", newPhone);
            resolver.update(uri, values, "mimetype=? and raw_contact_id=?", new String[]{"vnd.android.cursor.item/phone_v2", id + ""});
        }else{
            Toast.makeText(this, "沒有找到號碼", Toast.LENGTH_SHORT).show();
        }
        cursor.close();
    }

列表查詢

private List<HashMap<String, String>> mContactList = new ArrayList<>();

/**
     * 查詢手機聯絡人並顯示
     */
    private void queryContactsShowData() {
        mContactList.clear();
        Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        if (cursor == null)
            return;
        while (cursor.moveToNext()) {
            String phoneName;
            String phoneNumber;
            HashMap<String, String> listItem = new HashMap<>();
            phoneName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            listItem.put("phoneName", phoneName);
            listItem.put("phoneNumber", phoneNumber);
            mContactList.add(listItem);
        }

        cursor.close();

        mRv.setAdapter(new ContactAdapter());
        mRv.setLayoutManager(new LinearLayoutManager(mContext));

    }

附上測試的Demo

相關推薦

android通訊錄開發 刪改(Demo)

不廢話,直接開擼 主要邏輯程式碼如下 單查詢/增加聯絡人 /** * 寫入手機聯絡人 */ private void writeContact() { String name = "test";

TP5學習基礎一:刪改demo

表單 arr 處理 php req 學習 model類 浪費 新手 ①TP5--增刪改查簡單的demo 我先吐槽一下:因為工作需要研究tp5,去官網看了一下哎呦,資源挺多挺全啊!然後下載唯一免費的官方教程,我曹pdf打開533頁。講的很細但是開發能等看完才做嗎?看到精簡版快

MyBatis刪改操作Demo

第一步:導包:mybatis及jdbc connector.jar 第三步:配置表和類的對映檔案,實體類名.xml(在裡面寫sql語句) 第四步:建立資料庫會話session,進行增刪改查 檔案目錄 SqlMapConfig.xml <

Android-SQLiteOpenHelper裡刪改

為什麼要寫一篇,Android-SQLiteOpenHelper裡增刪改查,的文章呢;   因為之前的方式是:MySQLiteOpenHelper(只負責 生成開啟據庫/生成開啟表/升級表),在其他端:完成此資料庫表的增刪改查邏輯處理,這樣程式碼有些分散 現在 MySQLiteOpenHelper(負責

Java操作MongoDB刪改工具Demo

——因為實習工作需要,在學MongoDB,參考了公司的一個MongDB服務類,寫了一個整合的Demo,涉及到的大部分的增刪改查操作,而且還算規範,給大家參考!原始碼:(完整專案檔案下載連結:點選開啟連結)http://download.csdn.net/detail/zha

微信小程式雲開發刪改

Page({ data: { id:'',//修改用來儲存_id iSshow:true, inpVal:'', inp2Val:'', list:[] }, onLoad: function() { var tha

微信小程式•雲開發刪改

html <view class="container"> <view class='box' style='background:#FFFFFF'> <label>姓名:</label> <in

【Asp.Net】登陸註冊+sql server刪改demo

由於只注重主要功能實現,並未優化前端頁面,所以看起來比較原始。 採用webform技術 三層架構 + webform顯示 Models層,資料模型層 BLL層,業務邏輯層 reference Models and DAO DAO層,資料訪問層 reference M

HBuilder ------混合開發 -----刪改

<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><script type="text/javascript" src=

小程式雲開發刪改

學習小程式第一天,踩了不少坑,比如: 1.誤把微信公眾的appId當作小程式appId用 2.沒有設定許可權,導致請求成功但是獲取不到資料(修改表的許可權設定為"所有使用者可讀,僅建立者及管理員可寫") 3.去修改表中不是自己在小程式建立的資訊(表中沒有openid的資

VUE2.0刪改編輯新增model(彈框)元件共用

Vue實戰篇(增刪改查附編輯新增model(彈框)元件共用) 前言 最近一直在學習Vue,發現一份crud不錯的原始碼 預覽連結 https://taylorchen709.github.

Android——操作資料庫-刪改-案例《商品展示》

package bzu.edu.cn.a17lab08; import android.content.DialogInterface; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActi

[VB] VB實現一個窗體的刪改demo

日常開發中,經常會針對默寫資料表進行增刪改查。 每次都要單獨處理,費時費力,考慮通過一個窗體進行封裝。(借鑑當時接觸的某家公司的套路) 外圍在呼叫時,傳入sql字串,展示字串,然後 被呼叫窗體根據傳入的資訊進行排版展示。 同時通過設定 增刪改查標誌,提供增刪改查的關聯

實現用資料庫儲存通訊錄 實現“刪改”的功能

#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> #include <string.h> char name[20]; int age; char sex[20]; char phonenum

網頁購物車刪改demo(AngularJS)

<!DOCTYPE html> <html><head><meta charset="UTF-8"><title></title><script src="js/angular.js">&l

jQuery登入刪改demo

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/

Android學習--------實現刪改數據庫操作以及實現相似微信好友對話管理操作

span varchar sta nta 刪除 statistic 版權 exec XML 版權聲明:本文為博主原創文章,轉載請註明原文地址。謝謝~ https://blog.csdn.n

Android入門 刪改通訊錄

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

使用CoreData進行資料刪改Demo

       本文主要介紹簡單CoreData的使用,從建立工程到進行資料的增刪改查,關於CoreData中的名詞解釋什麼的不做過多介紹。        首先,建立一個CoreData工程,在建立工程的選項處勾選Use CoreData,建立成功後,會在AppDelegat

Android 通訊錄刪改

一、通訊錄應用介紹 通訊錄應用是Android自帶的應用程式,我們看到此應用的時候,可能只認為這是一個應用,用資料庫儲存資料,但是實際上不是這樣的。 通訊錄是ContentProvider的應用,通訊錄由兩部分組成: (1)com.android.providers.