Android 查询 添加 修改 删除通讯录联系人示例
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 查询 添加 修改 删除通讯录联系人示例的更多相关文章
- oracle JOB 查询 添加 修改 删除
-------------查询JOB----------------- select job, what, next_date, next_sec, sysdate, failures, broken ...
- JavaWeb_day03_员工信息添加修改删除
day03员工的添加,修改,删除 修改功能 思路 : 点击修改员工数据之后,跳转到单行文本,查询要修改的员工id的全部信息,主键id设置为readonly,其余的都可以修改, 修改之后,提交按钮,提交 ...
- Web 1三级联动 下拉框 2添加修改删除 弹框
Web 三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...
- 打通前后端全栈开发node+vue进阶【课程学习系统项目实战详细讲解】(3):用户添加/修改/删除 vue表格组件 vue分页组件
第三章 建议学习时间8小时 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章] 演示地址:后台:demo ...
- 向Android模拟器中批量导入通讯录联系人
使用adb命令向Android模拟器中批量导入通讯录联系人的方法: 使用adb提供的命令, 可以非常方便地从PC中将通讯录批量导入android模拟器中. 首先要先准备好固定格式的vcf文件, 该文件 ...
- SpringBoot定时任务升级篇(动态添加修改删除定时任务)
需求缘起:在发布了<Spring Boot定时任务升级篇>之后得到不少反馈,其中有一个反馈就是如何动态添加修改删除定时任务?那么我们一起看看具体怎么实现,先看下本节大纲: (1)思路说明: ...
- 【转】C#添加修改删除文件文件夹大全
[转]C#添加修改删除文件文件夹大全 C#添加修改删除文件文件夹大全 StreamWriter sw = File.AppendText(Server.MapPath(".")+& ...
- Android软件开发之获取通讯录联系人信息
Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息拿出来. 这一篇文章我主要带领同学们熟悉Android的通讯录机制. 图中选中 ...
- Swift - 添加、修改、删除通讯录联系人
使用AddressBook.framework框架,我们除了可以很方便的获取通信录里的联系人.同时,还能对通讯录进行新增.修改.删除联系人操作. (注意:这些操作同查询一样,首先需要发起授权请求) 1 ...
随机推荐
- Python入门--8--现在需要先学习可视化--包:easygui
一.安装.了解easygui 下载地址:http://bbs.fishc.com/forum.php?mod=viewthread&tid=46069&extra=page%3D1%2 ...
- Hadoop学习(一)生态体系之简介
Hadoop 系列(一)基本概念 一.Hadoop 简介 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群 ...
- MAPZONE GIS SDK接入Openlayers3之五——图形编辑工具
图形编辑工具提供对要素图形进行增.删.改的功能,具体包括以下几种工具类型: 浏览工具 选择工具 创建要素工具 删除命令 分割工具 合并命令 节点编辑工具 修边工具 撤销命令 重做命令 工具的实现基本上 ...
- 零基础学python-3.2 变量赋值
这一节我们来具体展开变量赋值 1.以下我们举各种赋值的样例 anInt=12 anFloat=2.2 anStr='string' aList=['a','a','a'] anArray=(1,2,3 ...
- linux系统(ubuntu14.04)安装mentohust完毕校园网锐捷认证
近来升级电脑又一次做了系统.再次面临这linux系统下的各种校园网上网限制. 我在这里採用了mentohust来完毕锐捷认证. 这里我们选择Mentohust取代锐捷. Mentohust 是由华中科 ...
- [CSS3] Target HTML Elements not Explicitly set in the DOM with CSS Pseudo Elements (Blockquotes)
Pseudo elements allow us to target elements that are not explicitly set in the DOM. Using ::before : ...
- [Testing] Config jest to test Javascript Application -- Part 3
Run Jest Watch Mode by default locally with is-ci-cli In CI, we don’t want to start the tests in wat ...
- java8 stream sorted
1.对象类型配列 List<Person> list = Arrays.asList( new Person(22, "shaomch", "man" ...
- java远程调用rmi入门实例
RMI是Java的一组拥护开发分布式应用程序的API.RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol). ...
- window批处理-5 start
作用 又一次启动一个单独窗体.在新窗体中运行命令 格式 start [/w] FileName demo bat: @echo off echo 在新窗体中打开txt文件.并等待新窗体正常退出(exi ...