Android-读取所有联系人的简洁方法

一.联系人数据库

1.data表: 存放各种类型数据,如name,phone,email,在mimetypes表中确定数据类型;
2.raw_contacts表: 存放由data表多条数据关联一个联系人raw_contact_id;
3.contacts表: 大部分情况下raw_contacts表多条数据关联一个联系人contact_id;
4.mimetypes表: 联系人数据类型,例如name,phone,email..

搜了网上的获取所有联系人姓名和手号的代码,都是要连续查询两三个表,太繁琐了!
实际上使用android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI就可以了
因为Phone.CONTENT_URI就是系统APP的ContentProvider.java联合查询几个表(raw contact, contact, data)
无需再繁琐地去查询那几个表了,只需五行代码!
Cursor cur = getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
while (cur.moveToNext()) {
    String name = cur.getString(cur.getColumnIndex(Phone.DISPLAY_NAME));
    String number = cur.getString(cur.getColumnIndex(Phone.NUMBER));    
}
cur.close();

此外,通过手机号查找联系人,使用PhoneLookup.CONTENT_FIILTER_URI

二.短信数据库

在系统APP的SmsProvider.java
短信会话content://sms/conversations对应的SQL语句
    SELECT
        sms.body AS snippet,
        sms.thread_id AS thread_id,
        groups.msg_count AS msg_count,
        sms.date AS date,
        sms.address AS addr
    FROM  
        sms, (SELECT thread_id AS group_thread_id, MAX(date) AS group_date, 
        COUNT(*) AS msg_count FROM sms GROUP BY thread_id) AS groups
    WHERE
        sms.thread_id = groups.group_thread_id AND sms.date = groups.group_date
    ORDER BY date DESC

查询短信常用uri
短信详情uri: content://sms
短信会话uri: content://sms/conversations
Cursor cur = getContentResolver().query(uri, null, null, null, null);

简书: http://www.jianshu.com/p/b713c9efd727
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/53711162
GitHub博客:http://lioil.win/2016/07/19/Query-Contacts.html
Coding博客:http://c.lioil.win/2016/07/19/Query-Contacts.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值