Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 管理Android通信錄

管理Android通信錄

編輯:關於Android編程

Android提供了Contacts應用程序來管理聯系人,而且Android系統還為聯系人管理提供了ContentProvider,這就允許其它應用程序以ContentResolver來管理聯系人數據。

關於ContentProvider、ContentResolver和Uri詳解大家可以參考http://blog.csdn.net/fengyuzhengfan/article/details/37743963,這裡就不在過多的陳述了!

先送上實例運行效果圖:

\

運行效果圖

在對聯系人進行操作之前,先讓我們了解一下通訊錄數據庫裡面主要的幾張表:

1) RawContacts:存放聯系人的ID,_id屬性為主鍵,聲明為autoincrement,即不需要手動設置,其他屬性也不需要手動設置就有默認值;

2) mimetypes:存放數據的類型,比如"vnd.android.cursor.item/name"表示“姓名”類型的數據,"vnd.android.cursor.item/phone_v2"表示“電話”類型的數據;

字段名

說明

電話

vnd.android.cursor.item/phone_v2

姓名

vnd.android.cursor.item/name

郵件

vnd.android.cursor.item/email_v2

通信地址

vnd.android.cursor.item/postal-address_v2

組織

vnd.android.cursor.item/organization

照片

vnd.android.cursor.item/photo

3) data 存放具體的數據。

字段名

說明

Data._ID

"_id"

Data.DISPLAY_NAME

“display_name”

Data.DATA1

“data1”

Data.DATA2

“data2”

Data.RAW_CONTACT_ID

“raw_contact_id”

Data.MIMETYPE

“mimetype”

4) raw_contact_id屬性用來連接raw_contacts表,每條記錄表示一個具體數據;我們主要的數據(email、phone等)都存放在data表;

5) StructuredName 中主要保存的是聯系人姓名,其稱呼名和其拼音名。

當我們向通信錄數據庫中插入聯系人的時候,一般是先往RawContacts表插入一行空值以獲得返回的rawContactId也就是聯系人ID,之後再根據這個ID陸續向Data表中插入聯系人的姓名、電話、以及Email等信息。

應用實例:

package com.jph.contactproviderdemo;

import java.util.ArrayList;

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.Contacts.Data;
import android.provider.ContactsContract.RawContacts;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;
import android.widget.Toast;
/**
 * Describe:
* 通過ContenPprovider管理的聯系人
* 本實例主要實現了聯系人的添加與查詢
* @author JPH * Date:2014.07.15 * */ public class ContactProviderDemo extends Activity { ContentResolver resolver; Button btnSelect,btnAdd; EditText edtName,edtPhone,edtEmail; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnAdd=(Button)findViewById(R.id.add); btnSelect=(Button)findViewById(R.id.search); edtEmail=(EditText)findViewById(R.id.email); edtName=(EditText)findViewById(R.id.name); edtPhone=(EditText)findViewById(R.id.phone); //獲取ContentResolver對象 resolver=getContentResolver(); /*******************************************查詢聯系人***************************************************/ btnSelect.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //定義兩個ArrayList用於存放聯系人的信息 final ArrayListusername=new ArrayList(); final ArrayList>details=new ArrayList>(); //查詢聯系人數據 Cursor cursor=resolver.query(ContactsContract.Contacts.CONTENT_URI , null, null, null, null); //遍歷cursor取出聯系人姓名及ID while (cursor.moveToNext()) { //獲取聯系人姓名 String name=cursor.getString(cursor.getColumnIndex (ContactsContract.Contacts.DISPLAY_NAME)); //獲取聯系ID String contactId=cursor.getString(cursor.getColumnIndex (ContactsContract.Contacts._ID)); username.add(name); //查詢聯系人電話號碼 Cursor phones=resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI , null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactId, null, null); //定義一個detail列表數組用於存放聯系人的電話號碼和Email ArrayListdetail=new ArrayList(); //遍歷查詢結果,獲取該聯系人的多個電話號碼 while (phones.moveToNext()) { String phonenumber=phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); detail.add("電話號碼:"+phonenumber); } phones.close();//關閉phones游標回收資源 //查詢聯系人Email Cursor emails=resolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI , null, ContactsContract.CommonDataKinds.Email.CONTACT_ID+"="+contactId, null, null); //遍歷查詢結果,獲取該聯系人的多個電話號碼 while (emails.moveToNext()) { String emailAddress=emails.getString(emails.getColumnIndex( ContactsContract.CommonDataKinds.Email.DATA)); detail.add("Email:"+emailAddress); } emails.close();//關閉emails游標回收資源 details.add(detail); } cursor.close(); //加載result.xml布局界面代表的視圖 View view=getLayoutInflater().inflate(R.layout.result, null); //獲取view中的ExpandableListView組件 ExpandableListView list=(ExpandableListView) view.findViewById(R.id.list); //創建ExpandableListAdapter為list填充數據 ExpandableListAdapter adapter=new BaseExpandableListAdapter() { //定義一個顯示聯系人信息的TextView TextView geTextView(){ TextView textView=new TextView(ContactProviderDemo.this); AbsListView.LayoutParams lp=new AbsListView.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT,64); textView.setLayoutParams(lp); textView.setPadding(36, 0, 0, 0); textView.setTextSize(20); return textView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { // TODO Auto-generated method stub return true; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // TODO Auto-generated method stub TextView textView=geTextView(); textView.setText(getGroup(groupPosition).toString()); return textView; } @Override public long getGroupId(int groupPosition) { // TODO Auto-generated method stub return groupPosition; } @Override public int getGroupCount() { // TODO Auto-generated method stub return username.size(); } @Override public Object getGroup(int groupPosition) { // TODO Auto-generated method stub return username.get(groupPosition); } @Override public int getChildrenCount(int groupPosition) { // TODO Auto-generated method stub return details.get(groupPosition).size(); } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { // TODO Auto-generated method stub TextView textView=geTextView(); textView.setText(getChild(groupPosition, childPosition).toString()); return textView; } @Override public long getChildId(int groupPosition, int childPosition) { // TODO Auto-generated method stub return childPosition; } @Override public Object getChild(int groupPosition, int childPosition) { // TODO Auto-generated method stub return details.get(groupPosition).get(childPosition); } }; //為ExpandableListView設置ExpandableListAdapter list.setAdapter(adapter); //創建對話框顯示查詢結果 new AlertDialog.Builder(ContactProviderDemo.this). setView(view).setPositiveButton("確定", null).show(); } }); /*******************************************添加聯系人***************************************************/ btnAdd.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //獲取用戶輸入的聯系人信息 String name=edtName.getText().toString(); String phone=edtPhone.getText().toString(); String email=edtEmail.getText().toString(); //定義一個ContentValues ContentValues values=new ContentValues(); //向RawContacts.CONTENT_URI插入空值以獲得返回的rawContactId Uri uri=resolver.insert(RawContacts.CONTENT_URI, values); //解析出rawContactId long rawContactId=ContentUris.parseId(uri); values.clear(); /**********添加聯系人的姓名*************/ //設置聯系人Id values.put(Data.RAW_CONTACT_ID, rawContactId); //設置內容類型 values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); //設置聯系人姓名(StructuredName中保存的是聯系人姓名,其稱呼名和其拼音名) values.put(StructuredName.DISPLAY_NAME, name); //向聯系人URi添加聯系人姓名 resolver.insert(ContactsContract.Data.CONTENT_URI, values); values.clear(); /**********添加聯系人電話號碼*************/ values.put(Data.RAW_CONTACT_ID, rawContactId); //設置內容類型 values.put(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE); //設置聯系人電話 values.put(Phone.NUMBER, phone); //設置聯系人電話類型 values.put(Phone.TYPE, Phone.TYPE_MOBILE); //向聯系人URi添加電話號碼 resolver.insert(ContactsContract.Data.CONTENT_URI, values); values.clear(); /**********添加聯系人Email*************/ //設置聯系人Id values.put(Data.RAW_CONTACT_ID, rawContactId); //設置內容類型 values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); //設置聯系人Email values.put(Email.DATA,email); //向聯系人URi添加聯系人姓名 resolver.insert(ContactsContract.Data.CONTENT_URI, values); Toast.makeText(ContactProviderDemo.this, "添加聯系人成功", Toast.LENGTH_SHORT).show(); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.contact_provider_demo, menu); return true; } }



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved