從android2.0開始,聯系人的API做了很大的調整。
People接口由ContactsContract.Contacts代替。
要在AndroidMainfest.xml里面把權限打開:
<!-- 寫權限 -->
<uses-permission android:
name=
"android.permission.WRITE_CONTACTS" />
<!-- 讀權限 -->
<uses-permission android:
name=
"android.permission.READ_CONTACTS" />
************************************************************************************
1.6
獲取方法:
ContentResolver resolver
= getContentResolver();
Cursor cursorPhone
= resolver.query(People.CONTENT_URI,null,null , null,null);
2.1
獲取方法:
ContentResolver resolver
= getContentResolver();
Cursor cursorPhone
= resolver.query(ContactsContract.Contacts.CONTENT_URI,null,null , null,null);
1.6將電話號碼也放在同一個ContentProvider里,而2.1將號碼放到了ContactsContract.CommonDataKinds.Phone.CONTENT_URI
僅獲取手機號碼:
ContentResolver resolver
= getContentResolver();
Cursor cursorPhone
= resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.TYPE
+
"="
+ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE , null,null);
************************************************************************************
一、android聯系人
2.xSDK版本
Uri
: content
:
//com.android.contacts/contacts
聯系人姓名字段:display_name
1.6以下SDK
Uri:Contacts.People.CONTENT_URI; (android.provider.Contacts.People.CONTENT_URI;)
聯系人姓名字段:Contacts.People.NAME;
例如:
Uri personUri
= null;
String columnName
= null;
if(SDK_VERSION
>
4){
//2.x,sdk版本
personUri
= Uri.parse(
"content://com.android.contacts/contacts");
columnName
=
"display_name";
}
else{
//1.6以下SDK
personUri
= Contacts.People.CONTENT_URI;
= Contacts.People.NAME;
}
二、短信箱
Cursor cursorInbox
= getContentResolver().query(Uri.parse(
"content://sms/inbox"),
null, null, null, null);
//獲取收件箱信息,可以查詢收件箱
Cursor cursorSendbox
= getContentResolver().query(Uri.parse(
"content://sms/sent"),
null, null, null, null);
//發件箱信息,可以查詢發件箱
三、其中Uri表現形式
Android1.6及以前的版本中查詢手機中的電話用android.provider.Contacts.People.CONTENT_URI;
1、android.provider.Contacts.People.CONTENT_URI;
在SDK2.X使用時,提示:
This class is deprecated.
The APIs have been superseded by ContactsContract.
The newer APIs allow access multiple accounts and support aggregation of similar contacts.
These APIs continue to work but will only return data for the first Google account created, which matches the original behavior.
SDK2.x使用如下Uri:
2、android.provider.ContactsContract.Contacts.CONTENT_URI;
3、android.provider.ContactsContract.Data.CONTENT_URI;
4、Uri uri
= Uri.parse(
"content://contacts/people/");
//是一個可以從設備返回所有通訊錄姓名列表的URI
// Get the base URI for People table in Contacts content provider.
Uri uri
= Uri.parse(
"content://contacts/people/23");
//是一個可以返回通訊錄中ID=23的單行記錄的URI字符串
6、Uri uri = Uri.parse("content://com.android.contacts/contacts");
獲取電話號碼用的Uri:
在Android2.0及以后(目前到了2.1,再往后不能保證無變化)用android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI進行查詢。
android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
獲取Email用的Uri:
ContactsContract.CommonDataKinds.Email.CONTENT_URI
四、讀取SIM卡中的聯系人
private Cursor getContacts() {
// Run query
Uri uri
= Uri.parse(
"content://icc/adn");
//Contacts.People.CONTENT_URI;
//Uri uri = Uri.parse("content://sim/adn");
String[] projection
=
new String[] {
"name",
"phone" };
String selection
= null;
String[] selectionArgs
= null;
String sortOrder
=
"name"
//Contacts.People.NAME// Contacts.PeopleColumns.DISPLAY_NAME
+
" COLLATE LOCALIZED ASC";
return managedQuery(uri, projection, selection, selectionArgs,
sortOrder);
}
Android2.0中獲取手機里聯系人的方法
public
void getContact(){
//獲得所有的聯系人
Cursor cur
= getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
//循環遍歷
if (cur.moveToFirst()) {
int idColumn
= cur.getColumnIndex(ContactsContract.Contacts._ID);
int displayNameColumn
= cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
do {
//獲得聯系人的ID號
String contactId
= cur.getString(idColumn);
//獲得聯系人姓名
String disPlayName
= cur.getString(displayNameColumn);
//查看該聯系人有多少個電話號碼。如果沒有這返回值為0
int phoneCount
= cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if(phoneCount
>
0){
//獲得聯系人的電話號碼
Cursor phones
= getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+
" = "
+ contactId, null, null);
if(phones.moveToFirst()){
do{
//遍歷所有的電話號碼
String phoneNumber
= phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
System.out.println(phoneNumber);
}
while(phones.moveToNext());
}
}
}
while (cur.moveToNext());
}
}
在聯系人的電話號碼中有很多種,如果只想獲得手機號碼
Cursor phones
= mContext.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+
" = "
+ contactId
+
" and "
+ ContactsContract.CommonDataKinds.Phone.TYPE
+
"="
+ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE, null, null);
-------------
轉載