轉自http://www.cnblogs.com/error404/archive/2013/03/12/2956090.html
在android中讀取連絡人資訊的程式,包括讀取連絡人姓名、手機號碼和郵箱
1:androidmanifest.xml的內容
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.itcast.contacts" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <uses-library android:name="android.test.runner" /> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="8" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="cn.itcast.contacts" android:label="Tests for My App" /></manifest>
裡面重要的是搭建測試環境和添加<uses-permission>,即讀取和寫入連絡人資訊的許可權
2:讀取的主要方法
/* * 讀取連絡人的資訊 */ public void testReadAllContacts() { Cursor cursor = this.getContext().getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); int contactIdIndex = 0; int nameIndex = 0; if(cursor.getCount() > 0) { contactIdIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID); nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); } while(cursor.moveToNext()) { String contactId = cursor.getString(contactIdIndex); String name = cursor.getString(nameIndex); Log.i(TAG, contactId); Log.i(TAG, name); /* * 尋找該連絡人的phone資訊 */ Cursor phones = this.getContext().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null, null); int phoneIndex = 0; if(phones.getCount() > 0) { phoneIndex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); } while(phones.moveToNext()) { String phoneNumber = phones.getString(phoneIndex); Log.i(TAG, phoneNumber); } /* * 尋找該連絡人的email資訊 */ Cursor emails = this.getContext().getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + "=" + contactId, null, null); int emailIndex = 0; if(emails.getCount() > 0) { emailIndex = emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA); } while(emails.moveToNext()) { String email = emails.getString(emailIndex); Log.i(TAG, email); } } }
3:目前手機中的連絡人資訊,有兩個連絡人的資訊,,
這是Hellen的聯絡資訊
這是Mike的聯絡資訊
4:測試結果,在控制台輸出的內容為:
可以看到在控制台輸出了兩個連絡人的資訊。
//--------------------------------------
擷取所有分組編號和組的名稱
Cursor groupInfoCursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, null, null, null, null);while(groupInfoCursor.moveToNext()) { int idIndex = groupInfoCursor.getColumnIndex(ContactsContract.Groups._ID); int titleIndex = groupInfoCursor.getColumnIndex(ContactsContract.Groups.TITLE); String id = groupInfoCursor.getString(idIndex); String title = groupInfoCursor.getString(titleIndex);}groupInfoCursor.close();
轉自http://www.cnblogs.com/jxgxy/archive/2012/07/28/2613069.html
先加二個讀和寫入權限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
package com.eboy.test;
import java.util.ArrayList;
import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.util.Log;
public class ContectTest extends AndroidTestCase {
private static final String TAG = "TestContact";
//查詢所有連絡人的姓名,電話,郵箱
public void TestContact() throws Exception {
Uri uri = Uri.parse("content://com.android.contacts/contacts");
ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{"_id"}, null, null, null);
while (cursor.moveToNext()) {
int contractID = cursor.getInt(0);
StringBuilder sb = new StringBuilder("contractID=");
sb.append(contractID);
uri = Uri.parse("content://com.android.contacts/contacts/" + contractID + "/data");
Cursor cursor1 = resolver.query(uri, new String[]{"mimetype", "data1", "data2"}, null, null, null);
while (cursor1.moveToNext()) {
String data1 = cursor1.getString(cursor1.getColumnIndex("data1"));
String mimeType = cursor1.getString(cursor1.getColumnIndex("mimetype"));
if ("vnd.android.cursor.item/name".equals(mimeType)) { //是姓名
sb.append(",name=" + data1);
} else if ("vnd.android.cursor.item/email_v2".equals(mimeType)) { //郵箱
sb.append(",email=" + data1);
} else if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) { //手機
sb.append(",phone=" + data1);
}
}
cursor1.close();
Log.i(TAG, sb.toString());
}
cursor.close();
}
//查詢指定電話的連絡人姓名,郵箱
public void testContactNameByNumber() throws Exception {
String number = "18052369652";
Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number);
ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{"display_name"}, null, null, null);
if (cursor.moveToFirst()) {
String name = cursor.getString(0);
Log.i(TAG, name);
}
cursor.close();
}
//新增連絡人...,使用事務
public void testAddContact() throws Exception {
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver = getContext().getContentResolver();
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri)
.withValue("account_name", null)
.build();
operations.add(op1);
uri = Uri.parse("content://com.android.contacts/data");
ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/name")
.withValue("data2", "龔小永")
.build();
operations.add(op2);
ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/phone_v2")
.withValue("data1", "13539777967")
.withValue("data2", "2")
.build();
operations.add(op3);
ContentProviderOperation op4 = ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw_contact_id", 0)
.withValue("mimetype", "vnd.android.cursor.item/email_v2")
.withValue("data1", "asdfasfad@163.com")
.withValue("data2", "2")
.build();
operations.add(op4);
resolver.applyBatch("com.android.contacts", operations);
}