Android 获取系统联系人并排序
2016-01-21 15:45
453 查看
今天我要说的是获取Android手机里面联系人并按自己进行排序的方法。
在说这个之前,我只能说之前的自己真的很傻,为什么这么说呢,请大家看看之前的我是怎么做的?
之前的我:首先是通过获取系统的联系人,将名字转换成汉语拼音(在这个过程还用到了汉语拼音转换包),然后获取首字母进行排序,结果就是功能是实现了,但是相当复杂。
后来的我:直接在获取联系人的时候,也获取到了名字的拼音的拼写,然后自动排序。
那么下面我就开始上代码:
首先声明几点:
1、ContactMember 是我自己的实例类,里面有:
public
String contact_name;
public String contact_phone;
public int contact_id;
public String sortKey;
2、其次我们看到的URI是个很关键的东西,Android中提供ContentProvider实现数据共享,那么怎样获取这些数据呢,就是通过URI得到要访问的数据。
除了联系人,还有媒体库中的音乐啦、图片啦、视频啦都是这样获得的。如果大家有兴趣的话可以去看下。
并且我将在之后的博客中再写一下音乐、图片、视频的获取,方便大家阅读。
3、Cursor:这个称之为游标的东西,很管用的。通过它,我们可以获取数据库中的东西。但是有一点,大家千万要记住,用完之后一定要记得关闭。
不然会造成内存泄露等问题,后果很严重哦。
4、如果大家感兴趣的话,可以去ContactsContract.CommonDataKinds.Phone里的源码里看看,里面有很多解释,那么现在呢,我带大家示范性的看下。
下面这段代码就是对“sort_key”的解释,是不是很详细呢,如果大家还想要获取联系人其他的信息,那么都可以在这里面找到。
我为什么要拿这个出来比较呢?其实是想说
1、没有哪个人从一开始就知道怎样的技术就是最好的。
2、对Android里面的那些数据库的参数不熟悉,说白了,就是不熟悉Android机制。
3、即使之前有方法解决了这个问题,但是如果碰到更好的方式就不应该固步自封,而在于勇于尝试。
4、在不停的完善自己的同时,也渐渐暴露了自己的很多缺陷,然后才更清楚以后的自己应该怎么样去做。
5、多去技术型的博客溜达溜达,看看有什么新的技术介绍,如果有的话,可以自己开始做。
6、养成多看系统源码的习惯,很多我们不明白的问题在那里会有解答。
转自:http://blog.chinaunix.net/uid-26930580-id-4137246.html
在说这个之前,我只能说之前的自己真的很傻,为什么这么说呢,请大家看看之前的我是怎么做的?
之前的我:首先是通过获取系统的联系人,将名字转换成汉语拼音(在这个过程还用到了汉语拼音转换包),然后获取首字母进行排序,结果就是功能是实现了,但是相当复杂。
后来的我:直接在获取联系人的时候,也获取到了名字的拼音的拼写,然后自动排序。
那么下面我就开始上代码:
首先声明几点:
1、ContactMember 是我自己的实例类,里面有:
public
String contact_name;
public String contact_phone;
public int contact_id;
public String sortKey;
2、其次我们看到的URI是个很关键的东西,Android中提供ContentProvider实现数据共享,那么怎样获取这些数据呢,就是通过URI得到要访问的数据。
除了联系人,还有媒体库中的音乐啦、图片啦、视频啦都是这样获得的。如果大家有兴趣的话可以去看下。
并且我将在之后的博客中再写一下音乐、图片、视频的获取,方便大家阅读。
3、Cursor:这个称之为游标的东西,很管用的。通过它,我们可以获取数据库中的东西。但是有一点,大家千万要记住,用完之后一定要记得关闭。
不然会造成内存泄露等问题,后果很严重哦。
4、如果大家感兴趣的话,可以去ContactsContract.CommonDataKinds.Phone里的源码里看看,里面有很多解释,那么现在呢,我带大家示范性的看下。
下面这段代码就是对“sort_key”的解释,是不是很详细呢,如果大家还想要获取联系人其他的信息,那么都可以在这里面找到。
/** * Sort key that takes into account locale-based traditions for sorting * names in address books. The default * sort key is {@link #DISPLAY_NAME_PRIMARY}. For Chinese names * the sort key is the name's Pinyin spelling, and for Japanese names * it is the Hiragana version of the phonetic name. */ public static final String SORT_KEY_PRIMARY = "sort_key";5、以下就是获取联系人的具体代码,写完之后,终于把以前繁杂的代码去掉了,有种神清气爽的感觉。以后大家要是有这个需求的话,直接就可以copy了,O(∩_∩)O哈哈~
Cursor c; public ArrayList<ContactMember> getContact(Activity context) { ArrayList<ContactMember> listMembers = new ArrayList<ContactMember>(); Cursor cursor = null; try { Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; // 这里是获取联系人表的电话里的信息 包括:名字,名字拼音,联系人id,电话号码; // 然后在根据"sort-key"排序 cursor = context.getContentResolver().query( uri, new String[] { "display_name", "sort_key", "contact_id", "data1" }, null, null, "sort_key"); if (cursor.moveToFirst()) { do { ContactMember contact = new ContactMember(); String contact_phone = cursor .getString(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); String name = cursor.getString(0); String sortKey = getSortKey(cursor.getString(1)); int contact_id = cursor .getInt(cursor .getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); contact.contact_name = name; contact.sortKey = sortKey; contact.contact_phone = contact_phone; contact.setContact_id(contact_id); if (name != null) listMembers.add(contact); } while (cursor.moveToNext()); c = cursor; } } catch (Exception e) { e.printStackTrace(); } finally { context = null; } return listMembers; }
/** * 获取sort key的首个字符,如果是英文字母就直接返回,否则返回#。 * * @param sortKeyString * 数据库中读取出的sort key * @return 英文字母或者# */ private static String getSortKey(String sortKeyString) { String key = sortKeyString.substring(0, 1).toUpperCase(); if (key.matches("[A-Z]")) { return key; } return "#"; }
我为什么要拿这个出来比较呢?其实是想说
1、没有哪个人从一开始就知道怎样的技术就是最好的。
2、对Android里面的那些数据库的参数不熟悉,说白了,就是不熟悉Android机制。
3、即使之前有方法解决了这个问题,但是如果碰到更好的方式就不应该固步自封,而在于勇于尝试。
4、在不停的完善自己的同时,也渐渐暴露了自己的很多缺陷,然后才更清楚以后的自己应该怎么样去做。
5、多去技术型的博客溜达溜达,看看有什么新的技术介绍,如果有的话,可以自己开始做。
6、养成多看系统源码的习惯,很多我们不明白的问题在那里会有解答。
转自:http://blog.chinaunix.net/uid-26930580-id-4137246.html
相关文章推荐
- Android学习历程7-Activity详解
- android代码集锦
- AndroidManifest.xml配置文件详解
- Android Studio 图片资源引用杂谈
- Android小问题:android studio怎么查看数字签名 sha1(地图)
- Cordova / PhoneGap开发入门,基于HTML、CSS和JavaScript的Android移动开发框架
- android技巧(五)一个异步+接口回调的例子
- Android数据存储
- Android working with Google Maps V2
- Android Studio集成crashlytics后无法编译的问题
- Android中使用【microlog4】进行日志存储
- 初识Face++在android上的应用
- Android Content
- 彻底理解android中的内部存储与外部存储
- Ubuntu 编译Android源码出现Switch.pm出错信息的解决方法
- Android Netty框架的使用
- android 中wait notify 的使用,及wait与sleep区别
- PS将psd中的android小图标单个保存为png图标
- android换皮肤思路总结
- Android-语言设置流程分析