使用ContentProvider管理联系人
来源:互联网 发布:淘宝怎样设置降价提醒 编辑:程序博客网 时间:2024/05/21 15:47
Android系统提供了Contacts应用程序来管理联系人,而且还为联系人管理提供了ContentProvider。
下面通过一个实例来演示,实现查询系统所有联系人的姓名及其详细信息和添加联系人,代码如下:
读取联系人的Activity:package com.lovo.activity;import java.util.ArrayList;import android.app.Activity;import android.content.Intent;import android.database.Cursor;import android.os.Bundle;import android.provider.ContactsContract;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.Button;import android.widget.ExpandableListView;import android.widget.TextView;import com.lovo.lesson15.R;/** * 读取联系人的Activity * * @author Administrator * */public class ReadContactActivity extends Activity {/** * 保存联系人的姓名集合 */private ArrayList<String> namesList = new ArrayList<String>();/** * 保存联系人详细信息的集合 */private ArrayList<ArrayList<String>> infoList = new ArrayList<ArrayList<String>>();private ExpandableListView elv;private Button addContactBtn;private BaseExpandableListAdapter adapter;/** * 初始化集合 */public void initData() {namesList.clear();infoList.clear();// 查询联系人的基本信息// 系统联系人的URI:ContactsContract.Contacts.CONTENT_URICursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);while (cursor.moveToNext()) {// 获取联系人的IDint contactId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));// 获取联系人的姓名String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));namesList.add(name);// 存放每个联系人里面详细信息的集合,里面有电话号码和emailArrayList detailList = new ArrayList();// 查找电话号码// 获取系统联系人电话号码的URI:ContactsContract.CommonDataKinds.Phone.CONTENT_URI// 电话号码数据中对应联系人的ID列名:ContactsContract.CommonDataKinds.Phone.CONTACT_IDCursor phoneCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="+ contactId, null, null);while (phoneCursor.moveToNext()) {String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));detailList.add(phoneNumber);}phoneCursor.close();// 查找联系人的email// 获取联系人email的URI:ContactsContract.CommonDataKinds.Email.CONTENT_URI// email数据中对应联系人的ID列名:ContactsContract.CommonDataKinds.Email.CONTACT_IDCursor emailCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + "="+ contactId, null, null);while (emailCursor.moveToNext()) {String email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));detailList.add(email);}emailCursor.close();infoList.add(detailList);}cursor.close();}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.read_contact_main);initData();elv = (ExpandableListView) findViewById(R.id.read_contact_main_elv);addContactBtn = (Button) findViewById(R.id.read_contact_main_btn_add);addContactBtn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(ReadContactActivity.this,SaveContactActivity.class);startActivity(intent);}});adapter = new BaseExpandableListAdapter() {@Overridepublic boolean isChildSelectable(int groupPosition,int childPosition) {return true;}@Overridepublic boolean hasStableIds() {return true;}@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {TextView tv = new TextView(ReadContactActivity.this);tv.setText(namesList.get(groupPosition));tv.setPadding(50, 10, 10, 10);return tv;}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}@Overridepublic int getGroupCount() {return namesList.size();}@Overridepublic Object getGroup(int groupPosition) {return namesList.get(groupPosition);}@Overridepublic int getChildrenCount(int groupPosition) {return infoList.get(groupPosition).size();}@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {TextView tv = new TextView(ReadContactActivity.this);tv.setText(infoList.get(groupPosition).get(childPosition));tv.setPadding(10, 10, 10, 10);return tv;}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic Object getChild(int groupPosition, int childPosition) {return infoList.get(groupPosition).get(childPosition);}};elv.setAdapter(adapter);}// 添加联系人完成后回调此方法,更新adapter数据@Overrideprotected void onResume() {super.onResume();initData();adapter.notifyDataSetChanged();}}
读取联系人的布局XML:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/read_contact_main_btn_add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="增加" /> <ExpandableListView android:id="@+id/read_contact_main_elv" android:layout_width="match_parent" android:layout_height="wrap_content" > </ExpandableListView></LinearLayout>
增加联系人的Activity:
package com.lovo.activity;import android.app.Activity;import android.content.ContentUris;import android.content.ContentValues;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.CommonDataKinds.Email;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.CommonDataKinds.StructuredName;import android.provider.ContactsContract.Data;import android.provider.ContactsContract.RawContacts;import android.view.View;import android.widget.EditText;import com.lovo.lesson15.R;public class SaveContactActivity extends Activity {private EditText nameText;private EditText phoneText;private EditText emailText;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.add_contact_main);nameText = (EditText) findViewById(R.id.add_contact_main_et_name);phoneText = (EditText) findViewById(R.id.add_contact_main_et_phone);emailText = (EditText) findViewById(R.id.add_contact_main_et_email);}public void click(View v) {if (v.getId() == R.id.add_contact_main_btn_ok) {ContentValues values = new ContentValues();// 添加一条空数据并获取其ID,此ID为当前增加的联系人IDUri uri = getContentResolver().insert(RawContacts.CONTENT_URI,values);// 使用工具类ContentUris来解析Uri中的IDlong contactId = ContentUris.parseId(uri);// 添加联系人的姓名if (nameText.getText() != null&& !"".equals(nameText.getText().toString().trim())) {// 将ContentValues里面的所有内容清空values.clear();// 增加联系人IDvalues.put(Data.RAW_CONTACT_ID, contactId);// 指定要添加联系人姓名的MIME类型values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);// 指定要添加联系人的姓名values.put(StructuredName.GIVEN_NAME, nameText.getText().toString());// 添加联系人的姓名getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);}// 添加联系人的电话if (phoneText.getText() != null&& !"".equals(phoneText.getText().toString().trim())) {// 将ContentValues里面的所有内容清空values.clear();// 增加联系人IDvalues.put(Data.RAW_CONTACT_ID, contactId);// 指定要添加联系人电话的MIME类型values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);// 指定要添加的联系人电话的类型values.put(Phone.TYPE, Phone.TYPE_MOBILE);// 制定要添加联系人的电话values.put(Phone.NUMBER, phoneText.getText().toString());// 添加联系人的电话getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);}// 添加联系人的emailif (emailText.getText() != null&& !"".equals(emailText.getText().toString().trim())) {// 将ContentValues里面的所有内容清空values.clear();// 增加联系人IDvalues.put(Data.RAW_CONTACT_ID, contactId);// 指定要添加联系人email的MIME类型values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);// 指定要添加的联系人email的类型values.put(Email.TYPE, Email.TYPE_HOME);// 指定要添加的联系人的emailvalues.put(Email.DATA, emailText.getText().toString());// 添加联系人的emailgetContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);}finish();}if (v.getId() == R.id.add_contact_main_btn_back) {finish();}}}
增加联系人的布局XML:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="联系人的姓名" /> <EditText android:id="@+id/add_contact_main_et_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="联系人的电话" /> <EditText android:id="@+id/add_contact_main_et_phone" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="联系人的email" /> <EditText android:id="@+id/add_contact_main_et_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal" > <Button android:id="@+id/add_contact_main_btn_ok" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="click" android:text="保存" /> <Button android:id="@+id/add_contact_main_btn_back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:onClick="click" android:text="返回" /> </LinearLayout></LinearLayout>
要读取系统联系人,不要忘了加上如下权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/><uses-permission android:name="android.permission.WRITE_CONTACTS"/>
- 使用ContentProvider管理联系人
- 使用ContentProvider管理联系人
- 使用ContentProvider 管理联系人
- ContentProvider,及使用系统URI管理联系人
- contentprovider管理联系人信息
- 初学Android,使用ContentProvider管理电话簿联系人(五十三)
- 使用 ContentProvider 管理联系人(包括每人有多个电话号码)
- Android 使用ContentProvider 添加联系人
- 使用系统ContentProvider添加联系人
- 使用ContentProvider获取联系人的所有信息
- 安卓中使用ContentProvider获取和添加联系人
- 使用系统ContentProvider获取联系人信息
- 使用ContentProvider读取系统联系人信息
- 使用ContentProvider读取手机联系人跟手机短信
- 使用ContentProvider管理照片
- 使用ContentProvider管理多媒体内容
- 使用ContentProvider管理多媒体内容
- 使用ContentProvider管理多媒体内容
- Android Service(四)
- 10分钟学会基于ASP.NET的 JQuery实例 (转)
- ack.vim——vim 整个工程全局查找插件
- IT开发技术网站集
- SoapUI日期格式输入出错--invalid date format (2013-07-05 12:10:08) with out - s at correct place
- 使用ContentProvider管理联系人
- 使用maven构建web项目实例
- vim格式化C代码
- JAVA回调函数
- hash字符串 转数字,大全
- ThinkPHP框架之实用项
- 最近的最近
- asp.net 发送邮件,带附件
- hdu 4092