前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1-AIV--使用ContentProvider获取短信

1-AIV--使用ContentProvider获取短信

作者头像
张风捷特烈
发布2018-09-26 16:30:57
7680
发布2018-09-26 16:30:57
举报
零、前言

1.顾名思义,内容提供者,目的:实现跨进程间数据共享 2.基于数据库提供数据 3.如电话簿,短信,歌曲信息都是以数据库存储存储,都可以通过ContentProvider获取 4.不太熟悉安卓运行时权限的童鞋可以看一下我封装的权限申请类: TI--安卓运行时权限完美封装 5.如果只是想使用的人,直接把静态方法拷贝。 6.本文只打印一下查询结果:ListView篇将会界面展示数据,Xml篇将会介绍备份到本地

一、代码实现
1.实体类
代码语言:javascript
复制
/**
 * 作者:张风捷特烈
 * 时间:2018/4/12:16:46
 * 邮箱:1981462002@qq.com
 * 说明:短信实体类
 */
public class SMSBean {
    /**
     * 短信发送方
     */
    public String address;

    /**
     * 号码在通讯录中的姓名:无为null
     */
    public String name;
    /**
     * 短信时间
     */
    public String date;
    /**
     * 短信内容
     */
    public String body;
    /**
     * 1 接收短信 2 发送短信
     */
    public int type;

    /**
     * 同一个手机号互发的短信,其序号是相同的
     */
    public int thread_id;


    @Override
    public String toString() {
        return "SMSBean{" +
                "address='" + address + '\'' +
                ", name='" + name + '\'' +
                ", date='" + date + '\'' +
                ", body='" + body + '\'' +
                ", type=" + type +
                ", thread_id=" + thread_id +
                '}';
    }
}
2.查询联系人的封装方法
代码语言:javascript
复制
    /**
     * 获取短信:SMSBean:address发信人  date时间  body信息内容
     *
     * @param ctx 上下文
     * @return 短信bean集合 注意添加读取短信权限
     */
    public static List<SMSBean> getSMS(Context ctx) {
        List<SMSBean> smsBeans = new ArrayList<>();
        //[1.]获得ContentResolver对象
        ContentResolver resolver = ctx.getContentResolver();
        //[2.1]得到Uri :访问raw_contacts的url
        Uri uri = Uri.parse("content://sms");

        //[3]查询表,获得sms表游标结果集
        String[] projection = {"address", "date", "body", "type","person","thread_id"};//访问表的字段
        Cursor cursor = resolver.query(
                uri, projection, null, null, null);
        while (cursor.moveToNext()) {//遍历游标,获取数据,储存在bean中
            SMSBean smsBean = new SMSBean();
            smsBean.address = cursor.getString(0);
            smsBean.date = cursor.getString(1);
            smsBean.body = cursor.getString(2);
            smsBean.type = cursor.getInt(cursor.getColumnIndex("type"));
            smsBean.name = cursor.getString(cursor.getColumnIndex("person"));
            smsBean.thread_id = cursor.getInt(cursor.getColumnIndex("thread_id"));
            smsBeans.add(smsBean);
        }
        cursor.close();
        return smsBeans;
    }
3.使用:权限:<uses-permission android:name="android.permission.READ_SMS"/>

注意:查询数据库是耗时操作,为了不阻塞主线程,最好新建个线程操作

代码语言:javascript
复制
new Thread(new Runnable() {
    @Override
    public void run() {
        List<ContactBean> contact = PhoneUtils_Contact.getContact(MainActivity.this);
        System.out.println(contact.get(0));
    }
}).start();
4.结果

短信.png

本文由张风捷特烈原创,转载请注明 更多安卓技术欢迎访问:https://www.jianshu.com/c/004f3fe34c94 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com 你的喜欢与支持将是我最大的动力

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.08.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 零、前言
  • 一、代码实现
    • 1.实体类
      • 2.查询联系人的封装方法
        • 3.使用:权限:<uses-permission android:name="android.permission.READ_SMS"/>
          • 4.结果
          相关产品与服务
          短信
          腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档