Android獲取聯(lián)系人姓名和電話代碼
在開發(fā)中往往有要獲取聯(lián)系人列表的功能,但是這次卻不是獲取聯(lián)系人列表,而是在聯(lián)系人列表點擊單個聯(lián)系人,獲取單個聯(lián)系人的姓名和電話,并設(shè)置在指定的輸入框內(nèi),方便用戶的使用;以下是實現(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="點擊" /> </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>
這個就是一個普通的布局文件代碼;
/** * 獲取聯(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號 int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID); String contactId = cursor.getString(idColumn); vo.name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // 獲得聯(lián)系人的電話號碼的cursor; Cursor phones = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null); if (phones.moveToFirst()) { // 遍歷所有的電話號碼 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; }
這里是主要功能的代碼,在這里要做一個try catch的動作,因為Android手機的話會將微信還有qq的聯(lián)系方式也添加到列表中,但是其實是沒有電話號碼,點擊返回的時候,就會獲取不到,如果沒有try catch的就會報異常;
@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; } } }
這里是獲取值的一個回調(diào),在這個回調(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(); } }); } });
這里是點擊事件的處理,已經(jīng)做了android6.0及6.0以上系統(tǒng)權(quán)限的適配了;最后記得在清單文件中添加相應(yīng)的權(quán)限:
最終效果如下:
源碼地址:contactperson
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android ContentProvider實現(xiàn)獲取手機聯(lián)系人功能
- Android獲取手機通訊錄、sim卡聯(lián)系人及調(diào)用撥號界面方法
- Android 獲取手機聯(lián)系人實例代碼詳解
- android獲取聯(lián)系人示例分享
- Android編程操作聯(lián)系人的方法(查詢,獲取,添加等)
- Android獲取聯(lián)系人頭像的方法
- Android獲取手機聯(lián)系人信息
- Android獲取手機聯(lián)系人電話號碼并返回結(jié)果
- Android實現(xiàn)獲取聯(lián)系人電話號碼功能
- android如何獲取聯(lián)系人所有信息
相關(guān)文章
Android listview ExpandableListView實現(xiàn)多選,單選,全選,edittext實現(xiàn)批量輸入
這篇文章主要介紹了Android listview ExpandableListView實現(xiàn)多選,單選,全選,edittext實現(xiàn)批量輸入的實例代碼,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-01-01Android Studio3.6新特性之視圖綁定ViewBinding使用指南
這篇文章主要介紹了Android Studio3.6新特性之視圖綁定ViewBinding使用指南,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03