標籤:
35.內容提供者:ContentResolver
用內容提供者來擷取連絡人資訊
35-1:許可權
<!-- 對連絡人的讀、寫入權限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
35-2:建立實體類存放連絡人
int c_id;
String c_name;
String c_phone;
String c_email;
set和get方法以及構造方法
35-3:建立Uri
Uri uri = ContactsContract.Contacts.CONTENT_URI;//連絡人姓名
Uri uriPhone = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;//連絡人電話
Uri uriEmail = ContactsContract.CommonDataKinds.Email.CONTENT_URI;//連絡人郵箱
35-4:建立ContentResolver
ContentResolver resolver = this.getContentResolver();
35-5:用郵標來擷取連絡人名字
35-5-1:建立地址,通過郵標查詢
Cursor cursor = resolver.query(uri, null, null, null, null);
35-5-2:開始查詢
int contactIdIndex = 0;//連絡人ID
int nameIndex = 0;//連絡人姓名
if(cursor.getCount()>0){
contactIdIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID);
nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
}
35-5-3:通過郵標的moveToNext()方式擷取值
while(cursor.moveToNext()){
String contactId = cursor.getString(contactIdIndex);
name = cursor.getString(nameIndex);
……(此處還有下文代碼)
}
35-6:用郵標來擷取連絡人號碼(在上文while迴圈的基礎上繼續)
35-6-1:建立電話號碼的Cursor郵標
//selection相當於SQL中的Where語句吧
String selection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" +contactId;
Cursor phones = this.getContentResolver().query(uriPhone,null, selection, null, null);
int phoneIndex = 0;
35-6-2如果查詢到了,就返回phoneIndex
if(phones.getCount()>0){
phoneIndex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
}
35-6-3:同上擷取值
while(phones.moveToNext()){
phoneNumber = phones.getString(phoneIndex);
……(如果還要擷取郵箱,同理在此處寫上代碼)
}
35-7:擷取郵箱
35-7-1:建立郵標查詢
String selectionEmail = ContactsContract.CommonDataKinds.Email.CONTACT_ID +"="+contactId;
Cursor email = this.getContentResolver().query(uriEmail, null, selectionEmail, null, null);
35-7-2:查詢並返回
int emailIndex = 0;
if(email.getCount()>0){
emailIndex = email.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA);
}
35-7-3:同上擷取值
while (email.moveToNext()) {
Email = email.getString(emailIndex);
}
如果覺得看得麻煩,可以直接用下面現成的代碼:
註:請加許可權及執行個體
Toast.makeText(getApplicationContext(), "正在擷取資訊", 0).show();
ContentResolver resolver = this.getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);
int contactIdIndex = 0;
int nameIndex = 0;
Contact contact;
if (cursor.getCount() > 0) {
contactIdIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID);
nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
}else{
Toast.makeText(getApplicationContext(), "您沒有連絡人資訊", 0).show();
}
while (cursor.moveToNext()) {
String contactId = cursor.getString(contactIdIndex);
name = cursor.getString(nameIndex);
String selection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ "=" + contactId;
Cursor phones = this.getContentResolver().query(uriPhone, null,selection, null, null);
int phoneIndex = 0;
if (phones.getCount() > 0) {
phoneIndex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
}
while (phones.moveToNext()) {
phoneNumber = phones.getString(phoneIndex);
Toast.makeText(getApplicationContext(), name+"==="+phoneNumber, 0).show();
contact = new Contact(name, phoneNumber);
list.add(contact);
}
}
android內容提供者總結