Android獲取聯(lián)系人姓名和電話代碼
在開(kāi)發(fā)中往往有要獲取聯(lián)系人列表的功能,但是這次卻不是獲取聯(lián)系人列表,而是在聯(lián)系人列表點(diǎn)擊單個(gè)聯(lián)系人,獲取單個(gè)聯(lián)系人的姓名和電話,并設(shè)置在指定的輸入框內(nèi),方便用戶的使用;以下是實(shí)現(xiàn)的代碼:
<?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" > <LinearLayout android:layout_width="fill_parent" android:layout_height="40dp" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:paddingLeft="10dp" android:text="姓名:" android:textColor="@android:color/black" android:textSize="13sp" /> <EditText android:id="@+id/et_name" android:layout_width="200dp" android:layout_height="fill_parent" android:layout_marginLeft="10dp" /> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="40dp" android:text="點(diǎn)擊" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="40dp" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:paddingLeft="10dp" android:text="電話:" android:textColor="@android:color/black" android:textSize="13sp" /> <EditText android:id="@+id/et_phone" android:layout_width="200dp" android:layout_height="fill_parent" android:layout_marginLeft="10dp" android:inputType="phone" /> </LinearLayout> </LinearLayout>
這個(gè)就是一個(gè)普通的布局文件代碼;
/**
* 獲取聯(lián)系人電話
*
* @param cursor
* @param context
* @return
*/
private ContactBen getContactPhone(Cursor cursor, Context context) {
ContactBen vo = new ContactBen();
int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
int phoneNum = 0;
try {
phoneNum = cursor.getInt(phoneColumn);
} catch (Exception e) {
return null;
}
// String phoneResult = "";
if (phoneNum > 0) {
// 獲得聯(lián)系人的ID號(hào)
int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);
String contactId = cursor.getString(idColumn);
vo.name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// 獲得聯(lián)系人的電話號(hào)碼的cursor;
Cursor phones = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
if (phones.moveToFirst()) {
// 遍歷所有的電話號(hào)碼
for (; !phones.isAfterLast(); phones.moveToNext()) {
int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);
int phone_type = phones.getInt(typeindex);
String phoneNumber = phones.getString(index);
switch (phone_type) {
case 2:
vo.phone = phoneNumber;
break;
}
}
if (!phones.isClosed()) {
phones.close();
}
}
}
return vo;
}
這里是主要功能的代碼,在這里要做一個(gè)try catch的動(dòng)作,因?yàn)锳ndroid手機(jī)的話會(huì)將微信還有qq的聯(lián)系方式也添加到列表中,但是其實(shí)是沒(méi)有電話號(hào)碼,點(diǎn)擊返回的時(shí)候,就會(huì)獲取不到,如果沒(méi)有try catch的就會(huì)報(bào)異常;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case (1): {
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
Uri contactData = data.getData();
@SuppressWarnings("deprecation")
Cursor c = MainActivity.this.managedQuery(contactData, null, null, null, null);
c.moveToFirst();
ContactBen contactPhone = getContactPhone(c, MainActivity.this);
if (contactPhone == null) {
contactPhone = new ContactBen();
}
et_name.setText("" + contactPhone.name);
et_phone.setText("" + contactPhone.phone);
}
}
break;
}
}
}
這里是獲取值的一個(gè)回調(diào),在這個(gè)回調(diào)中可以獲取到你想要的數(shù)據(jù);
findViewById(R.id.btn1).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
requestPermission(new String[] { Manifest.permission.READ_CONTACTS }, new PermissionHandler() {
@Override
public void onGranted() {
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, 1);
}
@Override
public void onDenied() {
super.onDenied();
}
});
}
});
這里是點(diǎn)擊事件的處理,已經(jīng)做了android6.0及6.0以上系統(tǒng)權(quán)限的適配了;最后記得在清單文件中添加相應(yīng)的權(quán)限:
最終效果如下:

源碼地址:contactperson
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android ContentProvider實(shí)現(xiàn)獲取手機(jī)聯(lián)系人功能
- Android獲取手機(jī)通訊錄、sim卡聯(lián)系人及調(diào)用撥號(hào)界面方法
- Android 獲取手機(jī)聯(lián)系人實(shí)例代碼詳解
- android獲取聯(lián)系人示例分享
- Android編程操作聯(lián)系人的方法(查詢,獲取,添加等)
- Android獲取聯(lián)系人頭像的方法
- Android獲取手機(jī)聯(lián)系人信息
- Android獲取手機(jī)聯(lián)系人電話號(hào)碼并返回結(jié)果
- Android實(shí)現(xiàn)獲取聯(lián)系人電話號(hào)碼功能
- android如何獲取聯(lián)系人所有信息
相關(guān)文章
Android Studio 3.1.X中導(dǎo)入項(xiàng)目的正確方法分享
這篇文章主要給大家介紹了關(guān)于Android Studio 3.1.X中導(dǎo)入項(xiàng)目的正確方法,文中一步步將解決的方法以及可能遇到的問(wèn)題介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
Android將應(yīng)用調(diào)試log信息保存在SD卡的方法
Android將應(yīng)用調(diào)試log信息保存在SD卡的方法大家都知道嗎,下面腳本之家小編給大家分享Android將應(yīng)用調(diào)試log信息保存在SD卡的方法,感興趣的朋友參考下2016-04-04
Android中PopuWindow實(shí)現(xiàn)下拉列表實(shí)例
本篇文章主要介紹了Android中PopuWindow實(shí)現(xiàn)下拉列表實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
android編程實(shí)現(xiàn)圖片庫(kù)的封裝方法
這篇文章主要介紹了android編程實(shí)現(xiàn)圖片庫(kù)的封裝方法,涉及Android針對(duì)圖片的下載、保存、獲取及操作緩存圖片等相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Android運(yùn)用BroadcastReceiver實(shí)現(xiàn)強(qiáng)制下線
本篇文章主要介紹了Android運(yùn)用BroadcastReceiver實(shí)現(xiàn)強(qiáng)制下線,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
Android編程實(shí)現(xiàn)控件不同狀態(tài)文字顯示不同顏色的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)控件不同狀態(tài)文字顯示不同顏色的方法,涉及Android針對(duì)控件布局文件屬性設(shè)置及狀態(tài)判定等相關(guān)技巧,需要的朋友可以參考下2016-02-02
android將Bitmap對(duì)象保存到SD卡中的方法
這篇文章主要介紹了android將Bitmap對(duì)象保存到SD卡中的方法,涉及Android讀寫(xiě)SD卡數(shù)據(jù)的方法,需要的朋友可以參考下2015-04-04

