数据库获取 Android 短信
读取短信需要的权限
<uses-permission android:name="android.permission.READ_SMS"/>
读取数据库短信方法
public static List<Map<String, String>> getSmsCode() {
String lastTime = "1534228493681"; // 时间
Log.i("SMSUtil", "开始获取短信");
Cursor cursor = null;
// 添加异常捕捉
try {
//第一种, 查询所有短信
cursor = App.mContext.getContentResolver().query(
Uri.parse("content://sms"),
new String[]{"_id", "address", "body", "date", "person", "type"},
null, null, "date desc");
//第二种, 通过查询条件, 例如:date > lastTime, 过滤数据
/*cursor = App.mContext.getContentResolver().query(
Uri.parse("content://sms"),
new String[]{"_id", "address", "body", "date", "person", "type"},
"date > ?", new String[]{lastTime}, "date desc");*/
if (cursor != null) {
List<Map<String, String>> smsList = new ArrayList<>();
while (cursor.moveToNext()) {
String body = cursor.getString(cursor.getColumnIndex("body"));// 在这里获取短信信息
String person = cursor.getString(cursor.getColumnIndex("person")); // 陌生人为null
String address = cursor.getString(cursor.getColumnIndex("address"));
String _id = cursor.getString(cursor.getColumnIndex("_id"));
String date = cursor.getString(cursor.getColumnIndex("date"));
String type = cursor.getString(cursor.getColumnIndex("type"));
HashMap<String, String> smsMap = new HashMap<>();
smsMap.put("body", body);
smsMap.put("person", person);
smsMap.put("address", address);
smsMap.put("_id", _id);
smsMap.put("date", date);
smsList.add(smsMap);
Log.i("test_sms", "body = " + body + " person = " + person + " address = " + address
+ " date = " + date + " type = " + type);
}
// 返回所有的短信
return smsList;
}
} catch (Exception e) {
e.printStackTrace();
Log.i("test_sms", "e = " + e.getMessage());
} finally {
if (cursor != null) {
cursor.close();
}
}
return null;
}
URI 主要有:
content://sms/ 所有短信 (本示例用的所有)
content://sms/inbox 收件箱
content://sms/sent 已发送
content://sms/draft 草稿
content://sms/outbox 发件箱
content://sms/failed 发送失败
content://sms/queued 待发送列表
SMS 主要结构:
_id => 短消息序号 如 100
thread_id => 对话的序号 如 100
address => 发件人地址,手机号. 如 + 8613811810000
person => 发件人,返回一个数字就是联系人列表里的序号,陌生人为 null
date => 日期 long 型。如 1256539465022
protocol => 协议 0 SMS_RPOTO, 1 MMS_PROTO
read => 是否阅读 0 未读, 1 已读
status => 状态 -1 接收,0 complete, 64 pending, 128 failed
type => 类型 1 是接收到的,2 是已发出
(ALL = 0; 所有
INBOX = 1; 收件箱
SENT = 2; 已发送
DRAFT = 3; 草稿
OUTBOX = 4; 发件箱
FAILED = 5; 失败
QUEUED = 6;)待发送
body => 短消息内容
service_center => 短信服务中心号码编号。如 + 8613800755500
原文发布时间为:2018-08-15
本文来自云栖社区合作伙伴“Android开发中文站”,了解相关信息可以关注“Android开发中文站”。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android安卓比较完美的无限自动轮播
轮播功能在APP中是比较常见的,网上也有很多第三方的自动轮播库,做的很不错,这里自己手写一版简单的ViewPager+Handler机制的自动无限轮播,小白可以直接上手的。 先上简单的核心代码,代码中有详细的注释。 private void initView() { auto_viewpager = (ViewPager) findViewById(R.id.vp_shuffling); tv_content = (TextView) findViewById(R.id.tv_content); dotLayout = (LinearLayout) findViewById(R.id.layout_point); mADParseArray = new ArrayList<String>(); mADParseArray .add("http://m.easyto.com/m/zhulifuwu_banner.jpg"); mADParseArray .add("http://m.easyto.com/m/japan/images/banner_3y_new.jpg"); ...
- 下一篇
8月16日科技联播:红装在身我芯谷歌,国产红芯陷入抄袭门
红装虽然穿在身,我芯依然谷歌芯,起码皮肤是咱们中国自主研发的呀!特斯拉缺陷证据遭曝光,有什么比自己人说的话更有说服力的?阿里巴巴“88VIP”,一卡打通“吃玩听看买”,正所谓“人生没有白剁的手,你花掉每一分都有回报”啊! 国产红芯号称自主研发浏览器核心,结果是Chrome换皮 红芯国产浏览器日前宣布完成2.5亿元C轮融资,并获晨兴资本、达晨创投等多家机构跟投,这个国产浏览器声称自主研发内核,并自信能打破美国垄断。然而有网友发现,通过将红芯浏览器的安装文件多次解压缩后,出现了大量与谷歌Chrome浏览器中一致的同名文件,安装目录高度一致,甚至含有谷歌浏览器的图标文件及版本号。 特斯拉车辆缺陷证据曝光,或置司机生命于危险境地 特斯拉告密者Martin Tripp发推文公开了特斯拉内部邮件、照片以及车辆识别号码,并称这些是其电池工厂制造工艺存在
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题