android5.0联系人 sort_key改成phonebook_label
项目中用到了联系人根据字母排序,在android4.0手机上是可以的,但是在android4.4以上的手机排序是乱的,一般字母排序都是根据sort_key这个拼音进行排序,而android5.0这个字段没有保存拼音,直接是汉字.
于是我把4.4的手机上联系人db文件查看了一下,发现phonebook_label保存的是联系人姓名拼音首字母
如何使用adb命令把联系人db文件copy到电脑。
1.手机跟电脑usb数据线进行连接,并且电脑端装了手机usb驱动(简单说明就是在开发调试环境下)
2.联系人数据库copy到sdcard
cat /data/data/com.android.providers.contacts/databases/contacts2.db > /sdcard/contacts2.db
3.先exit退出adb shell界面 把sdcard的db文件复制到d盘
adb pull /sdcard/contacts2.db D:\contacts2.db
以下是我写的一段查询数据库说有联系人的代码,根据操作系统不同查询不同的sort_key,大家单独调试时记得增加访问联系人权限
- /**
- * 查找所有联系人
- */
- public static List<SWWContact> findAllContacts(ContentResolver cr) {
- List<SWWContact> list = new ArrayList<SWWContact>();
- String[] projection=new String[]{
- ContactsContract.Contacts.DISPLAY_NAME,
- ContactsContract.Contacts.SORT_KEY_PRIMARY,
- ContactsContract.Contacts._ID,
- ContactsContract.Contacts.PHOTO_ID,
- ContactsContract.Contacts.LOOKUP_KEY};
- //如果android操作系统版本4.4或4.4以上就要用phonebook_label而不是sort_key字段
- if(android.os.Build.VERSION.SDK_INT>=19){
- projection[1]="phonebook_label";
- }
- Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,
- projection, null, null,
- "sort_key COLLATE LOCALIZED asc");
- if (null!=cursor&&cursor.moveToFirst()){
- do {
- SWWContact cb = new SWWContact();
- cb.setDisplayName(cursor.getString(0));
- String sortKey=cursor.getString(1);
- if(sortKey.trim().substring(0,1).matches("[a-z]")){
- sortKey=sortKey.toUpperCase();
- }
- cb.setSortKey(sortKey);
- cb.setContactId(cursor.getInt(2));
- cb.setPhotoId(cursor.getLong(3));
- cb.setLookUpKey(cursor.getString(4));
- cb.setPhoneNum(getContactNumber(cursor.getInt(2),cr));
- list.add(cb);
- } while (cursor.moveToNext());
- cursor.close();
- }
- return list;
- }
- /**
- * 根据联系人ID得到联系人号码
- */
- private static String getContactNumber(int contactId,ContentResolver cr){
- Cursor phones = cr.query(
- ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
- null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID
- + " = " + contactId, null, null);
- String phoneNumber="";
- if(phones.moveToNext()){
- phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
- }
- phones.close();
- return phoneNumber;
- }
android5.0联系人 sort_key改成phonebook_label的更多相关文章
- .NET Core 2.0 项目的智能提示是英文,改成中文的解决方案
截至目前为止(2017.09.21),Microsoft 官方并没有提供 .NET Core 2.0 正式版的多语言安装包. 因此,在 Visual Studio 2015 Update 3 和 Vi ...
- OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out
OpenGL ES和OpenGL的图标 关于“OpenGL ES SL 3.0规范中以前的attribute改成了in varying改成了out”这个问题,做一阐述: 1.关键字的小修 ...
- Nuxt 2.0 需要将pug-loader改成pug-plain-loader
Nuxt 2.0 需要将pug-loader改成pug-plain-loader npm i pug-plain-loader -D 解决问题!! 参考链接 https://my.oschina.ne ...
- matrix-gui-2.0 将javascript文件夹改成js文件夹
/******************************************************************************** * matrix-gui-2.0 将 ...
- 复利计算5.0(改成Java版本)与 单元测试
//由于C语言版本不方便单元测试,所以改成了java版本,部分代码如下:import java.util.Scanner; public class FuLi{ public static void ...
- Android5.0之Activity的转场动画
Activity的转场动画很早就有,但是太过于单调,样式也不好看,于是Google在Android5.0之后,又推出的新的转场动画,效果还是非常炫的,今天我们一起来看一下. 1.旧转场动画回顾 首先我 ...
- Android5.0和Android6.0适配
gradle配置项 compileSdkVersion 用哪个 Android SDK 版本编译你的应用.因此我们强烈推荐总是使用最新的 SDK 进行编译.在现有代码上使用新的编译检查可以获得很多好处 ...
- python学习——将while循环改成函数
笨办法学python第33节 这一节主要学习内容是while循环,记录内容为将while改成函数,首先源代码如下: i = 0 numbers = [] while i < 6: print & ...
- zepto插件 countdown 倒计时插件 从jquery 改成 zepto
插件特色:支持zepto库 支持时间戳格式 支持年月日时分秒格式 countdown 由jquery依赖库改成zepto zepto的event机制与jquery不同,所以更换之后代码不能正常运行 ...
随机推荐
- windows下面安装Python和pip终极教程
在大二的时候接触过一段时间的Python,最近又开始玩起了这门语言.总的来说,个 人很喜欢Python的语言风格,但是这门语言对于windows并不算很友好,因为如果是初学者在windows环境下安装 ...
- ssm简单配置
MyBatis 是一个可以自定义SQL.存储过程和高级映射的持久层框架. MyBatis 摒除了大部分的JDBC代码.手工设置参数和结果集重获. MyBatis 只使用简单的XML 和注解来配置和映射 ...
- 在iPhone上同时关闭语音控制和siri的方法
分享 步骤及要点:1.在设置里打开siri.语音控制就自动关闭了.2.在siri里的"仅语言拨号"语言项里选择"土耳其文"或者"阿拉伯文". ...
- HTML5 WebSocket
在WebSocket API中,浏览器和服务器只需要做一个握手动作,然后,浏览器和服务器之间就形成一条快速通道,两者之间就可以直接进行数据传送,这一个功能可以应用到"字幕",自己做 ...
- Qgis连接Oracle
CMake编译中选择编译Oracle一项以后,编译的qgis才会有连接Oracle数据库的功能. 编译qgis以后,可以通过添加矢量图层中选择Oracle数据库,或是添加Oracle空间图层,或是添加 ...
- DES加密
接口等加密字段 import java.security.SecureRandom; import javax.crypto.Cipher;import javax.crypto.SecretKey; ...
- 一个简单的路由,用javascript实现
前端路由在很多开源的js类库框架中都得到支持,如angularJS,Backbone,Reactjs等等.前端路由和后端路由原理一样,是让所有的交互和展现在一个页面运行以达到减少服务器请求,提高客户体 ...
- android studio/Intellij idea之proguard实践
默认情况下,build->Gene Signed APK 反编译后发现,没有混淆... 多次爬stackoverflow才搞定这个问题: 首先 build variants这里由debug设置为 ...
- C#上位机制作之串口接受数据(利用接受事件)
前面设计好了界面,现在就开始写代码了,首先定义一个串口对象.. SerialPort serialport = new SerialPort();//定义串口对象 添加串口扫描函数,扫描出来所有可用串 ...
- jquery插入复杂表格,合并行列
此方法为个人测试所写,针对各种兼容性问题还未测试,初写的目的是easyui复杂表头有些缺陷,比如某个表头合并两列, 在easyui中这样操作无法绑定两个值 或者说我没找到 再或者 可以做个隐藏 数据列 ...