1.AndroidManifest.xml中添加权限

    <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>

2.布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.lj.chapter9.MainActivity"> <EditText
android:id="@+id/contactNameTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:ems="10"
android:inputType="textPersonName"
android:text="姓名" /> <EditText
android:id="@+id/phoneNumberTxt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="phone"
android:text="号码"
android:layout_below="@+id/contactNameTxt"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" /> <TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click Button Below to Run a Query"
android:textSize="17dip"
android:layout_below="@+id/phoneNumberTxt"
android:layout_alignRight="@+id/addButton"
android:layout_alignEnd="@+id/addButton"
android:layout_marginTop="34dp" /> <Button
android:id="@+id/queryButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click to Query Contacts Database"
android:layout_below="@+id/phoneNumberTxt"
android:layout_centerHorizontal="true"
android:layout_marginTop="88dp" /> <Button
android:id="@+id/addButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/queryButton"
android:layout_alignStart="@+id/queryButton"
android:layout_below="@+id/queryButton"
android:layout_marginTop="35dp"
android:text="Click to Add Contacts Database" />
<Button
android:id="@+id/updateButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/queryButton"
android:layout_alignStart="@+id/queryButton"
android:layout_below="@+id/addButton"
android:layout_marginTop="35dp"
android:text="Click to Update Contacts Database" /> <Button
android:id="@+id/deleteButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/queryButton"
android:layout_alignStart="@+id/queryButton"
android:layout_below="@+id/updateButton"
android:layout_marginTop="35dp"
android:text="Click to Delete Contacts Database" />
</RelativeLayout>

3.Activity活动

package com.example.lj.chapter9;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.support.annotation.IdRes;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends AppCompatActivity {
private static final String TAG = "AndroidTest"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button queryBtn = (Button) findViewById(R.id.queryButton);
queryBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
queryContactPhoneNumber();
}
}); Button addBtn = (Button) findViewById(R.id.addButton);
addBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addContactPhoneNumber(getEditValue(R.id.contactNameTxt), getEditValue(R.id.phoneNumberTxt));
}
}); Button updateBtn = (Button) findViewById(R.id.updateButton);
updateBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
updateContactPhoneNumber(getEditValue(R.id.contactNameTxt), getEditValue(R.id.phoneNumberTxt));
}
}); Button deleteBtn = (Button) findViewById(R.id.deleteButton);
deleteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteContactPhoneNumber(getEditValue(R.id.contactNameTxt));
}
});
} private String getEditValue(@IdRes int id) {
EditText txt = (EditText) findViewById(id);
return txt.getText().toString();
} private void deleteContactPhoneNumber(String contactName) {
//根据姓名求id
Uri uri = ContactsContract.RawContacts.CONTENT_URI;
ContentResolver resolver = getContentResolver();
String where = ContactsContract.PhoneLookup.DISPLAY_NAME;
Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data._ID}, where + "=?", new String[]{contactName}, null);
if (cursor.moveToFirst()) {
int id = cursor.getInt(0);
//根据id删除data中的相应数据
resolver.delete(uri, where + "=?", new String[]{contactName});
uri = ContactsContract.Data.CONTENT_URI;
resolver.delete(uri, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[]{id + ""});
}
Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show();
} private void updateContactPhoneNumber(String contactName, String phoneNumber) {
Uri uri = ContactsContract.Data.CONTENT_URI;//对data表的所有数据操作
ContentResolver resolver = getContentResolver();
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.DATA1, phoneNumber);
int result = resolver.update(uri, values, ContactsContract.Data.MIMETYPE + "=? and " + ContactsContract.PhoneLookup.DISPLAY_NAME + "=?",
new String[]{ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE, contactName});
if (result > 0) {
Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show();
}
} private void addContactPhoneNumber(String contactName, String phoneNumber) {
ContentValues values = new ContentValues();
Uri uri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
long contact_id = ContentUris.parseId(uri); //插入data表
uri = ContactsContract.Data.CONTENT_URI;
String raw_contact_id = ContactsContract.Data.RAW_CONTACT_ID;
String data2 = ContactsContract.Data.DATA2;
String data1 = ContactsContract.Data.DATA1;
//add Name
values.put(raw_contact_id, contact_id);
values.put(ContactsContract.CommonDataKinds.Phone.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(data2, contactName);
values.put(data1, contactName);
getContentResolver().insert(uri, values);
values.clear();
//add Phone
values.put(raw_contact_id, contact_id);
values.put(ContactsContract.CommonDataKinds.Phone.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(data2, phoneNumber); //手机
values.put(data1, phoneNumber);
getContentResolver().insert(uri, values);
values.clear();
Toast.makeText(this, "添加新的联系人:" + contactName + " " + phoneNumber, Toast.LENGTH_SHORT).show();
} private void queryContactPhoneNumber() {
String[] cols = {ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER};
Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
cols, null, null, null);
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
// 取得联系人名字
int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME);
int numberFieldColumnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String name = cursor.getString(nameFieldColumnIndex);
String number = cursor.getString(numberFieldColumnIndex);
Toast.makeText(this, name + " " + number, Toast.LENGTH_SHORT).show();
}
}
}

该活动主要是根据http://www.cnblogs.com/liaojie970/p/5744580.html这篇博客改编而来,将里面如:

Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");

方式改为了
uri = ContactsContract.Data.CONTENT_URI;

其基本思路是一样的

Android 查询 添加 修改 删除通讯录联系人示例的更多相关文章

  1. oracle JOB 查询 添加 修改 删除

    -------------查询JOB----------------- select job, what, next_date, next_sec, sysdate, failures, broken ...

  2. JavaWeb_day03_员工信息添加修改删除

    day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...

  3. Web 1三级联动 下拉框 2添加修改删除 弹框

    Web  三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  4. 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件

    第三章 建议学习时间8小时      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...

  5. 向Android模拟器中批量导入通讯录联系人

    使用adb命令向Android模拟器中批量导入通讯录联系人的方法: 使用adb提供的命令, 可以非常方便地从PC中将通讯录批量导入android模拟器中. 首先要先准备好固定格式的vcf文件, 该文件 ...

  6. SpringBoot定时任务升级篇(动态添加修改删除定时任务)

    需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...

  7. 【转】C#添加修改删除文件文件夹大全

    [转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...

  8. Android软件开发之获取通讯录联系人信息

    Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来. 这一篇文章我主要带领同学们熟悉Android的通讯录机制. 图中选中 ...

  9. Swift - 添加、修改、删除通讯录联系人

    使用AddressBook.framework框架,我们除了可以很方便的获取通信录里的联系人.同时,还能对通讯录进行新增.修改.删除联系人操作. (注意:这些操作同查询一样,首先需要发起授权请求) 1 ...

随机推荐

  1. msp430项目编程57

    msp430综合项目---扩展项目七57 1.电路工作原理 2.代码(显示部分) 3.代码(功能实现) 4.项目总结

  2. Redis数据结构之简单动态字符串

    Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将SDS用作Redi ...

  3. 487. Max Consecutive Ones II

    Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at mos ...

  4. 2017-10-28-morning-清北模拟赛

    T1 立方数(cubic) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是 ...

  5. [BOI2007] Mokia

    题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能够回 ...

  6. 第1章 SpringBoot 简介

    一.什么是Spring Boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发 ...

  7. JavaSE的static、final、abstract修饰符

    static :静态常量,静态方法,静态代码块     静态变量:  静态变量属于类的,使用类名来访问,非静态变量是属于对象的,"必须"使用对象来访问.           注意: ...

  8. Oracle SQL Developer Chanage UI to US Lanaguage

    \sqldeveloper-4.1.3.20.78-x64\sqldeveloper\sqldeveloper\bin Add content: AddVMOption -Duser.country= ...

  9. hdu 1679 The Unique MST (克鲁斯卡尔)

    The Unique MST Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24152   Accepted: 8587 D ...

  10. C语言使用以及其它语言经常出的错误

    1. 计算优先级 i/*pi/(*p) //默认即用“()”花括号分隔即可 2.分号结束 ; ; if(i<j);{ //code } //分号结束必须看清楚 3.声明变量 ; ; //声明变量 ...