转自:http://blog.csdn.net/zhangphil/article/details/47250747

本文给出了Android读取通讯录联系人的一般方法,且在读取Android通讯录联系人时候,将结果有序化(按照联系人姓名的首字符依次顺序读取:A ~ Z)。

读取的结果如图所示:



现给出实现该种Android通讯录读取的代码:

package zhangphil.contacts;import java.util.ArrayList;import android.app.ListActivity;import android.content.ContentResolver;import android.content.Context;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends ListActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);ArrayList<Contact> contacts = new ArrayList<Contact>();readContacts(contacts);ListView listView = this.getListView();ArrayAdapter<Contact> adapter = new MyAdapter(this,android.R.layout.simple_list_item_2, contacts);listView.setAdapter(adapter);}private class MyAdapter extends ArrayAdapter<Contact> {private int resource;private LayoutInflater inflater = null;private ArrayList<Contact> contacts;public MyAdapter(Context context, int resource,ArrayList<Contact> contacts) {super(context, resource);this.resource = resource;this.contacts = contacts;inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null)convertView = inflater.inflate(resource, null);Contact c = getItem(position);TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);TextView text2 = (TextView) convertView.findViewById(android.R.id.text2);//首字符,分组的依据。text1.setText(c.firstLetterOfName());//详情。text2.setText(c.name + " " + c.getPhoneNumbers());return convertView;}@Overridepublic Contact getItem(int pos) {return contacts.get(pos);}@Overridepublic int getCount() {return contacts.size();}}// 读取设备联系人的一般方法。大致流程就是这样,模板化的操作代码。private void readContacts(ArrayList<Contact> contacts) {Uri uri = Uri.parse("content://com.android.contacts/contacts");ContentResolver reslover = this.getContentResolver();// 在这里我们给query传递进去一个SORT_KEY_PRIMARY。// 告诉ContentResolver获得的结果安装联系人名字的首字母有序排列。Cursor cursor = reslover.query(uri, null, null, null,android.provider.ContactsContract.Contacts.SORT_KEY_PRIMARY);while (cursor.moveToNext()) {// 联系人IDString id = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts._ID));// Sort Key,读取的联系人按照姓名从 A->Z 排序分组。String sort_key_primary = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.SORT_KEY_PRIMARY));// 获得联系人姓名String name = cursor.getString(cursor.getColumnIndex(android.provider.ContactsContract.Contacts.DISPLAY_NAME));Contact mContact = new Contact();mContact.id = id;mContact.name = name;mContact.sort_key_primary = sort_key_primary;// 获得联系人手机号码Cursor phone = reslover.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="+ id, null, null);// 取得电话号码(可能存在多个号码)// 因为同一个名字下,用户可能存有一个以上的号,// 遍历。ArrayList<String> phoneNumbers = new ArrayList<String>();while (phone.moveToNext()) {int phoneFieldColumnIndex = phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);String phoneNumber = phone.getString(phoneFieldColumnIndex);phoneNumbers.add(phoneNumber);}mContact.phoneNumbers = phoneNumbers;contacts.add(mContact);}}// 用于装载从联系人数据库中读取到的数据。// 结构化数据,便于数据操作和访问。private class Contact {public String id;public String name;public String sort_key_primary;public ArrayList<String> phoneNumbers;//获得一个联系人名字的首字符。//比如一个人的名字叫“安卓”,那么这个人联系人的首字符是:A。publicStringfirstLetterOfName(){String s=sort_key_primary.charAt(0)+"";returns.toUpperCase();}public String getPhoneNumbers() {String phones = " ";for (int i = 0; i < phoneNumbers.size(); i++) {phones += "号码" + i + ":" + phoneNumbers.get(i);}return phones;}}}


不要忘记在项目的AndroidManifest.xml文件中添加Android读写通讯录联系人的权限:

 <!-- 写权限 -->    <uses-permission android:name="android.permission.WRITE_CONTACTS" />    <!-- 读权限 -->    <uses-permission android:name="android.permission.READ_CONTACTS" />



现给出实现该种Android通讯录读取的代码:

更多相关文章

  1. android Content Provider
  2. Android(安卓)- 文件读写操作 总结
  3. android 的短信数据库的读取
  4. Android中的五大存储
  5. Android中读取电话本Contacts联系人的所有电话号信息
  6. Android(安卓)获取cpu序列号
  7. Android开发者指南Activity and Task Design
  8. Android中读取电话本Contacts联系人的所有电话号信息
  9. Android(安卓)- 文件读写操作 总结

随机推荐

  1. box-sizing, 相对定位与绝对定位
  2. PHP Mysql教程 PHP初中级开发者必学的MyS
  3. 线上mysql的binlog导致磁盘暴增的排查记
  4. 软测经典面试题(一)
  5. FTP文件传输协议介绍和常用命令
  6. html+css基础入门教程篇之伪元素
  7. 「知识点」JavaScript 中11个有趣的事实
  8. 前端vue面试题大全
  9. 前端开发」一篇文章概括目前流行的前端开
  10. 时序数据库丨DolphinDB流计算引擎如何实