獲取手機通訊錄的簡單實現
阿新 • • 發佈:2019-01-28
直接上程式碼:
在AndroidManifest.xml 中新增許可權
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.palmv.getcontacts"> <!-- 讀取聯絡人許可權 --> <uses-permission android:name="android.permission.READ_CONTACTS"/> <!-- 撥打電話許可權 --> <uses-permission android:name="android.permission.CALL_PHONE"/>
新增一個實體類:ContactEntity
package com.palmv.getcontacts; import android.graphics.Bitmap; /** * @author:chendd * @date:2016/7/14 * @description: */ public class ContactEntity { /** 聯絡人名稱 **/ private String name; /** 聯絡人號碼 **/ private String number; /** 聯絡人頭像 **/ private Bitmap photo; @Override public String toString() { return "ContactEntity{" + "name='" + name + '\'' + ", number='" + number + '\'' + ", photo=" + photo + '}'; } public ContactEntity(String name, String number, Bitmap photo) { this.name = name; this.number= number; this.photo = photo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Bitmap getPhoto() { return photo; } public void setPhoto(Bitmap photo) { this.photo = photo; } }
在activity中直接呼叫獲取通訊錄
package com.palmv.getcontacts; import android.content.ContentResolver; import android.content.ContentUris; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import java.io.InputStream; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getPhoneContacts(); } /** 聯絡人名稱 **/ private ArrayList<ContactEntity> mContacts = new ArrayList<ContactEntity>(); private static final String[] PHONES_PROJECTION = new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.PHOTO_ID, ContactsContract.CommonDataKinds.Phone.CONTACT_ID }; /** 聯絡人顯示名稱 **/ private static final int PHONES_DISPLAY_NAME_INDEX = 0; /** 電話號碼 **/ private static final int PHONES_NUMBER_INDEX = 1; /** 頭像ID **/ private static final int PHONES_PHOTO_ID_INDEX = 2; /** 聯絡人的ID **/ private static final int PHONES_CONTACT_ID_INDEX = 3; private void getPhoneContacts() { ContentResolver resolver = getContentResolver(); try { // 獲取手機聯絡人 Cursor phoneCursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, PHONES_PROJECTION, null, null, null); if (phoneCursor != null) { while (phoneCursor.moveToNext()) { // 得到手機號碼 String phoneNumber = phoneCursor .getString(PHONES_NUMBER_INDEX); // 當手機號碼為空的或者為空欄位 跳過當前迴圈 if (TextUtils.isEmpty(phoneNumber)) continue; System.out.println("======================"); System.out.println("---手機號碼:"+phoneNumber); // 得到聯絡人名稱 String contactName = phoneCursor .getString(PHONES_DISPLAY_NAME_INDEX); System.out.println("---聯絡人:"+contactName); // 得到聯絡人ID Long contactid = phoneCursor .getLong(PHONES_CONTACT_ID_INDEX); System.out.println("---聯絡人id:"+contactid); // 得到聯絡人頭像ID Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX); System.out.println("---聯絡人頭像:"+photoid); // 得到聯絡人頭像Bitamp Bitmap contactPhoto = null; // photoid 大於0 表示聯絡人有頭像 如果沒有給此人設定頭像則給他一個預設的 if (photoid > 0) { Uri uri = ContentUris.withAppendedId( ContactsContract.Contacts.CONTENT_URI, contactid); InputStream input = ContactsContract.Contacts .openContactPhotoInputStream(resolver, uri); contactPhoto = BitmapFactory.decodeStream(input); System.err.println("---聯絡人有頭像:"+photoid); } else { contactPhoto = BitmapFactory.decodeResource( getResources(), R.mipmap.ic_launcher); } ContactEntity mContact = new ContactEntity(contactName, phoneNumber, contactPhoto); mContacts.add(mContact); } phoneCursor.close(); } } catch (Exception e) { e.printStackTrace(); } } }
執行結果下圖: