1. 程式人生 > >Android 編輯聯絡人,增、刪、改程式碼

Android 編輯聯絡人,增、刪、改程式碼

最近的一個小專案有一個新增聯絡人的功能,到網上找了些資料,最後解決問題。

在此分享,其中有一個小小的問題,順帶分享解決方法。

增刪改程式碼

刪除

private void delContact(Context context, String name) {

Cursor cursor = getContentResolver().query(Data.CONTENT_URI,new String[] { Data.RAW_CONTACT_ID },

ContactsContract.Contacts.DISPLAY_NAME + "=?",new String[] { name }, null);

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

if (cursor.moveToFirst()) {
do {
long Id = cursor.getLong(cursor.getColumnIndex(Data.RAW_CONTACT_ID));

ops.add(ContentProviderOperation.newDelete(
ContentUris.withAppendedId(RawContacts.CONTENT_URI,Id)).build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} 
catch (Exception e){}
} while (cursor.moveToNext());
cursor.close();
}
}
修改
private void updateContact(Context context,String oldname, String name, String phone, String email,String website, String organization, String note) {

Cursor cursor = getContentResolver().query(Data.CONTENT_URI,new String[] { Data.RAW_CONTACT_ID },

ContactsContract.Contacts.DISPLAY_NAME + "=?",new String[] { oldname }, null);
cursor.moveToFirst();
String id = cursor.getString(cursor.getColumnIndex(Data.RAW_CONTACT_ID));
cursor.close();
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();


ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(

Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?" +
" AND " + Phone.TYPE + "=?",new String[] { String.valueOf(id),Phone.CONTENT_ITEM_TYPE,
String.valueOf(Phone.TYPE_HOME) }).withValue(Phone.NUMBER, phone).build());

// 更新email
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?" +" AND " + Email.TYPE + "=?",new String[] { String.valueOf(id),Email.CONTENT_ITEM_TYPE,
String.valueOf(Email.TYPE_HOME) }).withValue(Email.DATA, email).build());

// 更新姓名
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),StructuredName.CONTENT_ITEM_TYPE }).withValue(StructuredName.DISPLAY_NAME, name).build());

// 更新網站
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Website.CONTENT_ITEM_TYPE }).withValue(Website.URL, website).build());

// 更新公司
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Organization.CONTENT_ITEM_TYPE })
.withValue(Organization.COMPANY, organization).build());

// 更新note
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(Data.RAW_CONTACT_ID + "=?" + " AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { String.valueOf(id),Note.CONTENT_ITEM_TYPE }).withValue(Note.NOTE, note).build());

try{
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (Exception e) {
}
}


新增

private void addContact(Context context, String name,
String organisation,String phone, String fax, String email, String address,String website,String nickname){

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

//在名片表插入一個新名片
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null).withValue(ContactsContract.RawContacts._ID, 0).withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null).withValue(
ContactsContract.RawContacts.AGGREGATION_MODE,ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED).build());

// add name
//新增一條新名字記錄;對應RAW_CONTACT_ID為0的名片
if (!name.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,name).build());
}

//新增暱稱
if(!nickname.equals("")){
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Nickname.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Nickname.NAME,nickname).build());
}

// add company
if (!organisation.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.Organization.COMPANY,organisation).withValue(
ContactsContract.CommonDataKinds.Organization.TYPE,ContactsContract.CommonDataKinds.Organization.TYPE_WORK).build());
}

// add phone
if (!phone.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,phone).withValue(ContactsContract.CommonDataKinds.Phone.TYPE,1).build());
}

// add Fax 傳真,一般不用了
if (!fax.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.Phone.NUMBER,fax)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK).build());
}



// add email
if (!email.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.Email.DATA,email).withValue(ContactsContract.CommonDataKinds.Email.TYPE,1).build());
}

// add address
if (!address.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.StructuredPostal.STREET,address)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.TYPE,
ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK).build());
}

// add website
if (!website.equals("")) {
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.Website.URL,website)
.withValue(
ContactsContract.CommonDataKinds.Website.TYPE,
ContactsContract.CommonDataKinds.Website.TYPE_WORK).build());
}

// add IM
if(!im.equals("")){
//String qq="459255045"; for test
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(
ContactsContract.Data.RAW_CONTACT_ID, 0).withValue(
ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE).withValue(
ContactsContract.CommonDataKinds.Im.DATA1,im)
.withValue(
ContactsContract.CommonDataKinds.Im.PROTOCOL,
ContactsContract.CommonDataKinds.Im.PROTOCOL_QQ).build());
}

try {
context.getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops);
} catch (Exception e){
}

}
最後功能可以實現了,我只要新增功能。

但是很奇怪只能新增一次,所以又要修改,最後找到原因

// 在名片表插入一個新名片
                ops.add(ContentProviderOperation
                                .newInsert(ContactsContract.RawContacts.CONTENT_URI)
                                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
                                .withValue(ContactsContract.RawContacts._ID, 0)
                                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
                                .withValue(ContactsContract.RawContacts.AGGREGATION_MODE,
                                                ContactsContract.RawContacts.AGGREGATION_MODE_DISABLED)
                                .build());
把上面程式碼的 紅色部分去掉即可


這是在一個android論壇找到的資料。

相關推薦

Android 編輯聯絡人程式碼

最近的一個小專案有一個新增聯絡人的功能,到網上找了些資料,最後解決問題。 在此分享,其中有一個小小的問題,順帶分享解決方法。 增刪改程式碼 刪除 private void delContact(Context context, String name) { Cursor

Android SQLite資料庫:以及資料庫版本管理

建立資料庫版本v.1 /** * 作者:created by meixi * 郵箱:[email protected] * 日期:2018/10/9 11 */ public class DBHelper extends SQLiteOpenHelper

Java封裝JDBC數據庫查操作成JAR文件以供Web工程調用適用於多種數據庫

通過 ive trac end 使用方法 數據 div bstr 工程 廢話不多說,直接上源代碼,最後有使用方法,當然,也可以作為普通公用類使用,只是封裝成JAR更方便使用。 [java] view plain copy package db.util;

單例模式寫MySQL model類簡單的

單例模式的用途,可用於資料庫操作 <?php Class Db { static private $whe;//條件 static private $tab;//表名 static private $lim;//分段變數 static private $ord

【SRH】------node連接mongodb實現查功能

get 準備工作 升序 toarray update move demo ole 完成 node連接mongodb 準備工作 1.在項目根目錄下 初始化倉庫,形成node包 npm init -y 2.下載mongodb包 cnpm inst

【SRH】------node連線mongodb實現查功能

node連線mongodb 準備工作 1.在專案根目錄下   初始化倉庫,形成node包 npm init -y   2.下載mongodb包

MySQL:03---DDL(資料庫與表的建立刪除等)DML(表資料的等)

一、資料定義語言(DDL) 1.概念:定義資料庫、資料表、函式、檢視、索引、觸發器等 2.資料庫的基本操作 ①資料庫的建立 create database 資料庫名;  //建立資料庫用預設的字符集 create database 資料庫名  de

【SRH】------mongoose

mongoose中文文件 https://cn.mongoosedoc.top/docs/guide.html mongodb與mongoose的區別 mongoose: 可以將非關係型資料庫轉為關係型資料庫 可以限制欄位的型別 mongoose有pr

Android ContentProvider的常用的查使用方法

1、insert public void insertEmergency(String name, String number, String msg, String account) {         ContentResolver resolver = mContex

android開發之SQLite資料庫

        學習android開發不可避免的會涉及資料庫的使用,android使用的是SQLite資料庫。對於SQLite資料庫的基本資訊這裡就不過多的介紹,我們主要看哈是怎麼用的就是了。與以往資料庫不一樣的地方以前我們做javaWeb開發時用jdbc連線,現在變了,個人

IT忍者神龜之jquery easyui DataGrid 例項基礎功能

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/common/taglibs.jsp"%&g

iOS開發中SQLite簡單使用(基礎用法:建立表查)

SQLite,是一款輕型的資料庫,是遵守ACID的關係型資料庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域專案。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產

Oracle數據庫的

sel 增加 大小寫 tid rac inux run 結構化 values Oracle數據庫中,數據的增、刪、改、查,通過SQL語句實現 SQL:結構化查詢語言; 特點:不區分大小寫;字符串用單引號引起來;語句結束用分號表示結束; 行註釋,在語句的最前面加“--” 塊

LINQ 【查】數據綁定

tegra 文件 固定 bmi query asi 操作 作用 tor LINQ,語言集成查詢(Language Integrated Query) 是一組用於c#和Visual Basic語言的擴展。它允許編寫C#或者Visual Basic代碼以查詢數據庫相同的方式操作

SQL 語法之““查”

group by num having div 沒有 popu 模糊查詢 上海 條件 /* 四、查 1.普通查詢 語法:select <列名> from <表名> [where <查詢條件表達試>] [order by &

C#回顧 Ado.Net C#連接數據庫進行

app linq while 一行 awk col 所有 console value 一、簡介 1、ado.net是一門數據庫訪問技術。 他可以通過程序來操作數據庫 2、類庫 Connection 類 和數據庫交互,必須連接它。連接幫助指明數據庫服務器、數據庫名字、用戶名、

淺談表格(jq)的

false als 刪除 parse ++ script span 原生js true html代碼: <table border="1" cellpadding="20" cellspacing="0"> <thead> <t

表格排序(jq方法第一版)

yellow 成功 刪除按鈕 on() css -- action 是否 htm 功能: 1.動態添加表格 2.動態刪除表格,想刪就刪,任性 3.動態修改數據,就是看不順眼,改,改,改 4.動態‘查戶口‘ 5.序列號動態改變,你加內容我變,你刪除內容我也變 6.客戶就是上帝

SSM框架中的Mapper.xml文件中的查等操作

關系 class 標識 encoding res doctype info com 參數類型 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybati

MySQL之創

整數 alter times font 符號 drop current utf run MySQL Select version(); 當前服務器版本 Select database(); 查看當前工作數據庫 Show databases; 顯示所有數據庫 Sele