標籤:通訊錄 android
網上找的demo
每一段都有詳細注釋
關鍵代碼如下;
許可權:
<!-- 讀取連絡人許可權 --> <uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 撥打到電話許可權 --> <uses-permission android:name="android.permission.CALL_PHONE" />
代碼:
package com.yqy.yqy_testtxl;import java.io.InputStream;import java.util.ArrayList;import android.app.Activity;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.provider.ContactsContract.CommonDataKinds.Phone;import android.text.TextUtils;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getPhoneContacts();Log.e("YQY", mContacts.size() + "-------------mContacts---------");initList();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}/** 連絡人名稱 **/private ArrayList<ContactEntity> mContacts = new ArrayList<ContactEntity>();private static final String[] PHONES_PROJECTION = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER, Phone.PHOTO_ID, 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(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;// 得到連絡人名稱String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);// 得到連絡人IDLong contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);// 得到連絡人頭像IDLong photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);// 得到連絡人頭像BitampBitmap 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);} else {contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);}ContactEntity mContact = new ContactEntity(contactName,phoneNumber, contactPhoto);mContacts.add(mContact);}phoneCursor.close();}} catch (Exception e) {e.printStackTrace();}}private void initList() {ListView lv = (ListView) findViewById(R.id.listView1);lv.setAdapter(new MyAdapter());}class MyAdapter extends BaseAdapter {@Overridepublic int getCount() {if (mContacts != null && mContacts.size() > 0) {return mContacts.size();} else {return 0;}}@Overridepublic Object getItem(int position) {if (mContacts != null && mContacts.size() > 0) {return mContacts.get(position);} else {return null;}}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn arg0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {holder = new ViewHolder();convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item_contact, null);holder.name = (TextView) convertView.findViewById(R.id.tv_name);holder.number = (TextView) convertView.findViewById(R.id.tv_number);holder.photo = (ImageView) convertView.findViewById(R.id.iv_photo);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}ContactEntity contact = mContacts.get(position);holder.name.setText(contact.getName()+"");holder.number.setText(contact.getNumber()+"");holder.photo.setImageBitmap(contact.getPhoto());return convertView;}class ViewHolder {TextView name;TextView number;ImageView photo;}}}
連絡人實體類ContactEntity:
package com.yqy.yqy_testtxl;import android.graphics.Bitmap;/** * 連絡人資訊 * @author YQY * */public class ContactEntity {/** 連絡人名稱 **/private String name;/** 連絡人號碼 **/private String number;/** 連絡人頭像 **/private Bitmap photo;@Overridepublic String toString() {return "ContactEntity [name=" + name + ", number=" + number+ ", photo=" + photo + "]";}public ContactEntity(String name, String number, Bitmap photo) {super();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;}}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
android 擷取通訊錄並顯示listview