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 ...
随机推荐
- java多线程总结一:线程的两种创建方式及比较
1.线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行.当程序作为一个应 ...
- substring用法
字符串截取,substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串. substring(int beginIndex, int endIndex) 返回一 ...
- AC日记——[SDOI2009]晨跑 bzoj 1877
1877: [SDOI2009]晨跑 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 2131 Solved: 1142[Submit][Status][ ...
- MACBOOK 忘记密码
如果没有系统安装盘,可以采用下面的几种方法:首先,启动机器,启动时按住Apple和S键,以单用户模式(single user mode)进入系统.输入:mount -uv / 然后回车.接下来可以采用 ...
- Donser Online Judge 完成运行使命~
复试成功完成~ 2018年网研机考难度不大,仍然有些遗憾,前两题水题后两个题纯暴力 排行榜 排名 用户 题数 罚时 A B C D retest2018_INT246 (INT246) (+) (+) ...
- js中有包装类,java中也有包装类
new Number() vs Number() What is the difference between new Number() and Number()? I get that new Nu ...
- 转:NetBeans的远程Linux C开发实践
转: http://blog.csdn.net/jacktan/article/details/9268535 一直以来总觉得NetBeans生活在Eclipse的阴影下,同样做为一款不错的基于Jav ...
- [Cypress] install, configure, and script Cypress for JavaScript web applications -- part3
Use custom Cypress command for reusable assertions We’re duplicating quite a few commands between th ...
- Solidworks如何标注垂直度,平行度
1 标注一个基准特征,放到一个平面的线上即可,比如下图生成了一个基准面A 2 点击形位公差,设置形位公差的符号,公差值,相对基准面(主要那一栏),然后不要点确定,直接在图上点击某个面,就生成一个形 ...
- Pat(Advanced Level)Practice--1018(Public Bike Management)
Pat1018代码 题目描写叙述: There is a public bike service in Hangzhou City which provides great convenience t ...