博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android根据联系人姓名首字符顺序读取通讯录
阅读量:6808 次
发布时间:2019-06-26

本文共 4144 字,大约阅读时间需要 13 分钟。

本文给出了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 {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		ArrayList
contacts = new ArrayList
(); readContacts(contacts); ListView listView = this.getListView(); ArrayAdapter
adapter = new MyAdapter(this, android.R.layout.simple_list_item_2, contacts); listView.setAdapter(adapter); } private class MyAdapter extends ArrayAdapter
{ private int resource; private LayoutInflater inflater = null; private ArrayList
contacts; public MyAdapter(Context context, int resource, ArrayList
contacts) { super(context, resource); this.resource = resource; this.contacts = contacts; inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public 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; } @Override public Contact getItem(int pos) { return contacts.get(pos); } @Override public int getCount() { return contacts.size(); } } // 读取设备联系人的一般方法。大致流程就是这样,模板化的操作代码。 private void readContacts(ArrayList
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()) { // 联系人ID String 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
phoneNumbers = new ArrayList
(); 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
phoneNumbers; //获得一个联系人名字的首字符。 //比如一个人的名字叫“安卓”,那么这个人联系人的首字符是:A。 public String firstLetterOfName(){ String s=sort_key_primary.charAt(0)+""; return s.toUpperCase(); } public String getPhoneNumbers() { String phones = " "; for (int i = 0; i < phoneNumbers.size(); i++) { phones += "号码" + i + ":" + phoneNumbers.get(i); } return phones; } }}

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


你可能感兴趣的文章
shell命令 安装软件包
查看>>
Python程序-输出1000以内素数
查看>>
利用jira-python及selenium完成jira的统计报表及日报的填写
查看>>
网上书城项目
查看>>
HDU1426(DFS)
查看>>
IOS键盘样式风格有关设置
查看>>
centos6.5 下搭建lamp环境
查看>>
【C#】第2章学习要点
查看>>
动量和能量守恒定律概念理解
查看>>
Oracle Database 11g Express Edition学习笔记
查看>>
文献随笔(三)
查看>>
apache高性能配置
查看>>
安装redis
查看>>
STL笔记 ( 迭代器 )
查看>>
Reflector7.5.2.1的Bug
查看>>
(一)查询出排序中的最大值和最小值
查看>>
opencv学习之路(2)--(图像创建复制和保存)
查看>>
Windows下搭建GCC + Eclipse + OpenOCD的ARM开发环境
查看>>
overflow
查看>>
约瑟夫环的线段树解法
查看>>