Android 查询 添加 修改 删除通讯录联系人示例详解手机开发
2023-06-13 09:20:15 时间
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="姓名" /
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;
其基本思路是一样的
6190.html
app程序应用开发手机开发无线开发移动端开发相关文章
- android scaleanimation动画,【Android动画九章】-RotateAnimation(旋转动画)和ScaleAnimation(尺寸动画)…[通俗易懂]
- 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)
- Android RecyclerView实现子元素的Group分组,LinearLayoutManager垂直方向详解手机开发
- Android统计图表绘制:基于新版MPAndroidChart绘制数理统计柱状图详解手机开发
- Android Bluetooth蓝牙开发:发现Bluetooth蓝牙设备(1)详解手机开发
- Android设置EditText只能输入字母和数字详解手机开发
- android项目 微博客户端 源码详解手机开发
- Android监听Home按钮被点击详解手机开发
- Android 系统开关,wifi、手电筒等的开关详解手机开发
- android广播监听短信并显示内容详解手机开发
- Android-SQLite数据库操作详解手机开发
- Android开发中遇到的问题(四)——Android中WARNING: Application does not specify an API level requirement!的解决方法详解手机开发
- Android Go让上古神机崛起真正愿景或是收割功能机详解手机开发
- [android] 练习样式主题自定义activity切换动画详解手机开发
- [android] android通信协议详解手机开发
- [android] 隐式意图的配置详解手机开发
- [android] 常用数据适配器SimpleAdapter详解手机开发
- [android]常见的adb指令详解手机开发
- Android 控件之TextureView详解手机开发
- android绘制虚线详解手机开发
- android fragement报nullexcption错误详解手机开发
- android客户端和服务端js交互详解手机开发
- Android动画深入分析详解手机开发
- Android View底层到底是怎么绘制的详解手机开发
- Android Framework层看硬件加速详解手机开发
- Android Binder原理从开始到放弃详解手机开发