1-AIV--使用ContentProvider获取短信
零、前言
[1].顾名思义,内容提供者,目的:实现跨进程间数据共享
[2].基于数据库提供数据
[3].如电话簿,短信,歌曲信息都是以数据库存储存储,都可以通过ContentProvider获取
[4].不太熟悉安卓运行时权限的童鞋可以看一下我封装的权限申请类:
TI--安卓运行时权限完美封装
[5].如果只是想使用的人,直接把静态方法拷贝。
[6].本文只打印一下查询结果:ListView篇将会界面展示数据,Xml篇将会介绍备份到本地
一、代码实现
1.实体类
/**
* 作者:张风捷特烈
* 时间: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.查询联系人的封装方法
/**
* 获取短信: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"/>
注意:查询数据库是耗时操作,为了不阻塞主线程,最好新建个线程操作
new Thread(new Runnable() {
@Override
public void run() {
List<ContactBean> contact = PhoneUtils_Contact.getContact(MainActivity.this);
System.out.println(contact.get(0));
}
}).start();
4.结果
后记、
1.声明:
[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力
2.连接传送门:
更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
简书首发,腾讯云+社区同步更新
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com
3.联系我
QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328
4.欢迎关注我的微信公众号,最新精彩文章,及时送达:

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
2-AIV--使用ContentProvider查询联系人
零、前言 [1].顾名思义,内容提供者,目的:实现跨进程间数据共享 [2].基于数据库提供数据 [3].如电话簿,短信,歌曲信息都是以数据库存储存储,都可以通过ContentProvider获取 [4].不太熟悉安卓运行时权限的童鞋可以看一下我封装的权限申请类:TI--安卓运行时权限完美封装 [5].如果只是想使用的人,直接把静态方法拷贝即可,想知道原理的,图片和注释认真看一下,也可以自己分析一下联系人的表。 [6].本文只打印一下查询结果:ListView篇将会界面展示数据,Xml篇将会介绍备份到本地 一、代码实现 1.实现分析: raw_contacts表中查到contact_id, 每个contact_id下,根据contact_id查询data表字段, 然后判断mimetype的值,新建实体类,将数据设置到实体中, 将实体放入实体集合,查完返回集合。 联系人数据库 联系人.png 我们关注的时三张表: 1.raw_contacts 关注一个字段contact_id raw_contacts.png 2.data表和mimetype表:关注字段:mimetype_id 、raw_...
-
下一篇
2-VI--ListView的基本使用及优化
零、前言 [1] ListView 可以说是曾经的数一数二的控件,现在渐渐被RecycleView夺取锋芒。简单功能的使用ListView还是可以的。 [2] 本篇数据来源随机数据,方法可以看这篇:1-VI--随机数据生成 [3] 本篇介绍ListView数据填充及优化,普通使用-->convertView优化-->ViewHolder优化 效果 效果.png 一、普通使用 public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; @BindView(R.id.lv) ListView mLv; private ArrayList<String> mNames; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装