Android 短信相关的权限和支持的短信协议

android studio内容提供者(查看短信的猫)点击查看短信,闪退,无法显示短信内容。(附程序源代码,以及解决办法) 老师最近讲到内容提供者,让我们做个案例,查看短信的猫,但我写完代码,在android studio里编辑了短信,而且检查代码没有问题,但出现程序闪退,我在Logcat发现上述程序错误。我在网上搜索得出是权限问题,是sdk23对应用程序权限做出了改动。那个博主提供了两种结局方法:1.使用sdk22开发,并且运行此程序的android虚拟机或者是手机系统6.0以下。(我不建议采用)2.进行权限校验,在MainActivity里添加代码如下图: 用上面方法,我用的android studio自带的模拟器运行 阅读详情

Android 短信相关的权限和支持的短信协议

短信相关权限
<!-- 
发送消息-->
<uses-permissionandroid:name="android.permission.SEND_SMS"/>
<!-- 
阅读消息-->
<uses-permissionandroid:name="android.permission.READ_SMS"/>
<!-- 
写入消息-->
<uses-permissionandroid:name="android.permission.WRITE_SMS" />
<!-- 接收消息 -->
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/>
 

系统的短信库存在data/data/com.android.providers.telephony/databases/mmssms.db 
但真机不可读

URI:content://mms-sms/conversations 相关重要列
thread_id:这个字段很重要,同一个会话中他们的thread_id是一样的,也就是说通过thread_id就可以知道A与B在聊天 还是A与C在聊天
date :这条消息发送或接收的时间
read: 
0 表示未读 1表示已读
type : 1表示接收 2 表示发出
body 
表示 消息的内容

 

SMS不能直接访问数据库,只能通过协议来访问数据,相关的协议:      
content://sms/inbox 
      收件箱
content://sms/sent 
      已发送
content://sms/draft 
      草稿
content://sms/outbox 
      发件箱
content://sms/failed 
      发送失败
content://sms/queued 
      待发送列表


在模拟器上Outbox可能没有数据。
数据库中sms相关的字段如下: 
 
_id 
             一个自增字段,从1开始
thread_id 
  序号,同一发信人的id相同
address 
    发件人手机号码
person 
      联系人列表里的序号,陌生人为null(不一定有联系人就有值)
date 
          发件日期
protocol 
    协议,分为: 0 SMS_RPOTO, 1 MMS_PROTO
read 
         是否阅读 0未读, 1已读
status 
       状态 -1接收,0 complete, 64 pending, 128 failed
type
 
  ALL    =0;
 
  INBOX  = 1;
 
  SENT   = 2;
 
  DRAFT  = 3;
 
   OUTBOX =4;
 
   FAILED =5;
 
   QUEUED =6;
body 
                   短信内容
service_center 
   短信服务中心号码编号
subject 
                短信的主题
reply_path_present 
   TP-Reply-Path
locked 
  是否加锁

/////////////////////////////////////////////////////////////////////


android的源代码,sms支持的协议有:
sURLMatcher.addURI("sms", null, SMS_ALL);
sURLMatcher.addURI("sms", "#", SMS_ALL_ID);
sURLMatcher.addURI("sms", "inbox", SMS_INBOX);
sURLMatcher.addURI("sms", "inbox/#", SMS_INBOX_ID);
sURLMatcher.addURI("sms", "sent", SMS_SENT);
sURLMatcher.addURI("sms", "sent/#", SMS_SENT_ID);
sURLMatcher.addURI("sms", "draft", SMS_DRAFT);
sURLMatcher.addURI("sms", "draft/#", SMS_DRAFT_ID);
sURLMatcher.addURI("sms", "outbox", SMS_OUTBOX);
sURLMatcher.addURI("sms", "outbox/#", SMS_OUTBOX_ID);
sURLMatcher.addURI("sms", "undelivered", SMS_UNDELIVERED);
sURLMatcher.addURI("sms", "failed", SMS_FAILED);
sURLMatcher.addURI("sms", "failed/#", SMS_FAILED_ID);
sURLMatcher.addURI("sms", "queued", SMS_QUEUED);
sURLMatcher.addURI("sms", "conversations",SMS_CONVERSATIONS);
sURLMatcher.addURI("sms", "conversations/*",SMS_CONVERSATIONS_ID);
sURLMatcher.addURI("sms", "raw", SMS_RAW_MESSAGE);
sURLMatcher.addURI("sms", "attachments", SMS_ATTACHMENT);
sURLMatcher.addURI("sms", "attachments/#",SMS_ATTACHMENT_ID);
sURLMatcher.addURI("sms", "threadID", SMS_NEW_THREAD_ID);
sURLMatcher.addURI("sms", "threadID/*", SMS_QUERY_THREAD_ID);
sURLMatcher.addURI("sms", "status/#", SMS_STATUS_ID);
sURLMatcher.addURI("sms", "sr_pending", SMS_STATUS_PENDING);
sURLMatcher.addURI("sms", "sim", SMS_ALL_SIM);
sURLMatcher.addURI("sms", "sim/#", SMS_SIM);

/////////////////////////////////////////////////////////////////////

其中,delete方法中支持的协议为:
SMS_ALL 
             根据参数中的条件删除sms表数据
SMS_ALL_ID 
       根据_id删除sms表数据
SMS_CONVERSATIONS_ID 
   根据thread_id删除sms表数据,可以带其它条件
SMS_RAW_MESSAGE 
            根据参数中的条件删除 raw表
SMS_STATUS_PENDING 
       根据参数中的条件删除 sr_pending表
SMS_SIM 
                               从Sim卡上删除数据

//删除thread_id="3", _id="5"的数据
//SMS_CONVERSATIONS_ID:"content://sms/conversations/3"
this.getContentResolver().delete(Uri.parse("content://sms/conversations/3"),"_id=?", new String[]{"5"});
在数据库中每个发送者的thread_id虽然一样,但不是固定的,如果把一个发送者的全部数据删除掉,
然后换一个新号码发送短信时,thread_id是以数据库中最大的id+1赋值的。

/////////////////////////////////////////////////////////////////////

update支持的协议有很多:

SMS_RAW_MESSAGE  
SMS_STATUS_PENDING 
 
SMS_ALL 
 
SMS_FAILED 
 
SMS_QUEUED 
 
SMS_INBOX 
 
SMS_SENT 
 
SMS_DRAFT 
 
SMS_OUTBOX 
 
SMS_CONVERSATIONS 
 
SMS_ALL_ID 
 
SMS_INBOX_ID 
 
SMS_FAILED_ID 
 
SMS_SENT_ID 
 
SMS_DRAFT_ID 
 
SMS_OUTBOX_ID 
 
SMS_CONVERSATIONS_ID 
 
SMS_STATUS_ID

SMS_INBOX_ID测试:  
ContentValues cv = newContentValues(); 
 
cv.put("thread_id", "2"); 
 
cv.put("address","00000"); 
 
cv.put("person", "11"); 
 
cv.put("date","11111111"); 
 
this.getContentResolver().update(Uri.parse("content://sms/inbox/4"),cv, null,null); 
  
可以更新thread_id(但有可能混乱)


/////////////////////////////////////////////////////////////////////
insert支持的协议:

SMS_ALL  
SMS_INBOX 
 
SMS_FAILED 
 
SMS_QUEUED 
 
SMS_SENT 
 
SMS_DRAFT 
 
SMS_OUTBOX 
 
SMS_RAW_MESSAGE 
 
SMS_STATUS_PENDING 
 
SMS_ATTACHMENT 
 
SMS_NEW_THREAD_ID

向sms表插入数据时,type是根据协议来自动设置,  
如果传入的数据中没有设置date时,自动设置为当前系统时间;非SMS_INBOX协议时,read标志设置为1 
 
SMS_INBOX协议时,系统会自动查询并设置PERSON 
 
threadId为null或者0时,系统也会自动设置 
 

一直为造不了"发送失败"的邮件而发愁,现在来做一个:  
content://sms/failed

ContentValues cv = newContentValues();  
cv.put("_id", "99"); 
 
cv.put("thread_id", "0"); 
 
cv.put("address","9999"); 
 
cv.put("person", "888"); 
 
cv.put("date", "9999");
cv.put("protocol", "0");
cv.put("read", "1");
cv.put("status", "-1");
//cv.put("type", "0");
cv.put("body", "短信内容");
this.getContentResolver().insert(Uri.parse("content://sms/failed"),cv);
//插入短信是否设置了检验?
type
 
  ALL    =0;
 
  INBOX  = 1;
 
  SENT   = 2;
 
  DRAFT  = 3;
 
   OUTBOX =4;
 
   FAILED =5;
 
   QUEUED =6;
type是否被设置成了5?

Android短信发送:考虑动态权限和兼容性问题 小结:刚开始觉得短信发送很简单啊,不就是这样这样,再那样一下就好了嘛。但其实内容听繁琐的。坑不多,但需要判断的东西挺多。首先需要判断有无SIM卡 TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); String simState = t 阅读详情

相关推荐

Android开发之用Bmob实现短信验证码功能

本博客地址: http://blog.youkuaiyun.com/talentclass_ctt/article/details/51958374 这篇文章主要介绍发送验证码和校验验证码的功能,用到一个第三方平台Bmob,那Bmob是什么呢?Bmob可以开发一个云存储的移动应用软件,他提供了大量的标准的API接口,根据需要接入相关服务,开发者可以更加专注于应用的开发,让产品交付更快速,验证码功能就是其中...

talentclass_ctt的博客 4923

Permission Denial: reading com.android.providers.telephony.SmsProvider uri content://sms/ 异常解决

异常内容 java.lang.SecurityException: Permission Denial: reading com.android.providers.telephony.SmsProvider uri content://sms/ from pid=24847, uid=10064 requires android.permission.READ_SMS, or grantUriP...

weixin_44276072的博客 6706

影刀RPA实战番外工具篇: SmsForwarder-短信转发器

SmsForwarder是一款开源免费的安卓应用,它能够监控Android手机上的短信、来电和APP通知,并根据用户设定的规则自动转发到指定的渠道。这些渠道包括但不限于钉钉机器人、企业微信群机器人、飞书机器人、企业微信应用消息、邮箱、bark、webhook、Telegram机器人、Server酱、PushPlus和手机短信等。

4836

Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/i

最近在做调用系统相册,选择多照片问题,遇到了一个错,发现用原有的设置权限方式是不行的,总结一下解决办法,报错如下: ComponentInfo{com.example.chenkui.testpic/com.example.chenkui.testpic.TestPicActivity}: java.lang.SecurityException: Permission Denial: readin

qq_26337701的博客 8093

安卓短信自动化转发至微信实现教程

在快节奏的现代生活中,人们越来越倾向于使用即时通讯工具来交流,微信作为其中的佼佼者,已成为多数人的首选。然而,在某些情况下,例如商务沟通或紧急通知,我们仍然会收到重要的短信信息。因此,将短信内容自动转发到微信的解决方案应运而生,旨在为用户提供更为便捷的信息处理方式。实现短信转微信功能,需要在安卓手机上借助强大的自动化工具Tasker。Tasker不仅能够监听和处理短信,还能调用微信API,实现消息的自动转发。

weixin_30798867的博客 3474

Android短信登录及动态权限处理实践教程 - Bmob 1.0

Android作为一款开放的操作系统,其权限模型是用来保护用户隐私和设备安全的核心机制之一。在Android 6.0(API级别23)之前,应用安装时会弹出权限请求对话框,用户只能选择同意或拒绝全部权限。这一机制在Android 6.0被彻底改变,引入了运行时权限(Runtime Permissions)的概念,允许应用在运行时根据需要动态申请权限。这样的改变,使得应用可以更细致地控制权限的申请,用户也能更具体地了解权限的使用情况。

weixin_31569663的博客 796

数据库获取 Android 短信

读取短信需要的权限 &lt;uses-permission android:name="android.permission.READ_SMS"/&gt; 读取数据库短信方法    public static List&lt;Map&lt;String, String&gt;&gt; getSmsCode() {         String lastTime = "15342284...

qq_42483967的博客 246

Android中实现带发送报告的短信发送程序

SMS(Short Message Service)API允许应用程序发送和接收短信。在Android平台,这一功能被封装在SmsManager类中,开发者可以通过该类实现短信的发送逻辑。Android权限框架是为了保护用户数据和设备功能安全而设计的一套机制。它确保应用在访问系统资源时需要得到用户或系统的授权。权限分为普通权限、危险权限和签名权限。普通权限通常是无害的权限,例如设置时区,而危险权限可能影响用户隐私或设备安全,如读取联系人或发送短信。

weixin_42327217的博客 871

Android手机上监听短信的两种方式【转】

Android手机上监听短信有两种方式: 1、 接受系统的短信广播,操作短信内容。 优点:操作方便,适合简单的短信应用。 缺点:来信会在状态栏显示通知信息。 AndroidManifest.xml: <uses-permissionandroid:name="android.permission.SEND_SMS"></uses-permission&...

weixin_34023982的博客 406

安卓系统级流量监控与短信彩信处理技术探讨

短信,全称为短消息服务(SMS),起源于1985年,最初设计为在移动设备间传输简单的文本信息。随着技术的发展,彩信(MMS)也应运而生,它不仅支持文本信息,还能传输图片、音频和视频文件。短信彩信服务在2G网络时代到达顶峰,虽然随着智能手机的普及和3G/4G网络的发展,它们的功能逐渐被即时通讯应用(如WhatsApp、WeChat)所取代,但它们在通知、验证和应急通信方面仍扮演着重要角色。

weixin_29940495的博客 1000

基于Ansys Fluent和Mechanical的血管稳态流固耦合模型

流固耦合模型在医学中也会被用到,本次小编为大家带来针对人造血管内血液流动的仿真实例。 在开物云平台上找到Workbench 点击进入:https://cloud.yuansuan.cn/?user_source=community 在左侧的Toolbox中找到对应的模块:Fluid Flow(Fluent)和Static Structure 双击“Geometry”,进入建模功能 文件-打开-找到保存的模型文件 退回到主界面,在fluid flow(Fluent)中找到mesh

huasheng233的博客 3908

android 是否有短信权限,Android 短信相关的权限和支持的短信协议

短信相关权限android:name="android.permission.SEND_SMS"/>android:name="android.permission.READ_SMS"/>android:name="android.permission.WRITE_SMS" />android:name="android.permission.RECEIVE_SMS"/>系...

weixin_31653645的博客 1101

中兴SDH设备开局及业务配置

中兴SDH设备开局及业务配置 1.设备开局(S200-----S325) A.开电之后,按住截铃(bell off)开关,直至NCP告警灯变成橙色; B.此时,设备进入Download状态,设备IP为:192.192.192.11/24; 2.用交叉线(568A)将设备的QX口连接至电脑,电脑配置和设备相同网段的IP信息; 3.在电脑上测试连通性:pin...

weixin_33897722的博客 3996

android 中管理短信

为了看代码方便,一边在网上google资料,一边看Android java 源代码。 偶然发现了一个类MmsSmsDatabaseHelper.java,原来android将所有的短信信息都存入了mmssms.db中。 公开的SDK中没有这个类,不能直接使用。于是自己写了一个SQLiteOpenHelper,但是查询的时候发生SQL异常。 看来不能为所欲为了,不过据网上资料介绍可

集成显卡的开源主页 https://github.com/0604hx 8752

USB-C快充协议分析仪:QC/PD双协议识别与功率监测设计

USB-C快充协议是现代移动设备能量传输的核心技术标准,其本质是通过物理层电压特征(如DP/DM组合、CC线BMC编码)实现动态电压协商。理解协议握手原理对充电器研发、兼容性测试及故障诊断至关重要。本方案聚焦受电端(Sink)视角,基于FUSB302B与高阻抗DP/DM采样电路,实现QC2.0/QC3.0/QC4+与PD2.0/PD3.0的实时识别与状态机解析;结合INA219高精度电流检测与μs级同步采样,达成±0.06%功率测量精度。典型应用于快充芯片验证、产线协议一致性测试及第三方评测,为USB供电系

weixin_42153793的博客 243

jane street market prediction 冠军方案 奇巧淫技与topline链接整理(3/3)

目录前言将income 作为loss(优化目标)读取数据,定义优化目标模型训练与微调提交结果多目标学习Topline整理AE+MLP (rank10)Current 17th solution: Ensembles of deep (49 layer) MLPsmixup augmentation: a way to learn from trades with weight=0 (rank4)My (perhaps) over-complicated LSTM solutionCurrent 62nd .

weixin_51484067的博客 2628

安卓短信转发qq邮箱

fork一个github项目简介准备工作Tips 简介 最近不怎么带手机,所以收不到一些验证码什么的,所以想搞一个app放手机上将短信以有邮件的形式发送到指定邮箱,然后用电脑查看邮件,这样就可以不用带手机了。在github上找到一个项目叫sms-backup-plus,于是准备在这个项目的基础上进行更改。 准备工作 安装androidStudio 学习kotlin 怎么整合java和k...

superstar_zbt的博客 1606

华为防火墙USG6000V---内网访问外网---外网访问内网服务器(NAT服务器)示例配置

华为防火墙USG6000V示例配置,展示了访问防火墙、内网服务器、外网和外网访问内网服务器(NAT服务器)的配置。

lehe99的专栏 2万+

SMS Backup+ - 安全可靠的安卓短信备份与恢复工具

SMS Backup+ 是一款强大的开源安卓应用,专为短信、彩信和设备记录提供安全可靠的备份服务。通过先进的IMAP协议和XOAuth2授权机制,您可以将重要的通信数据同步到任何支持IMAP的邮箱服务,特别是Gmail。该应用还支持从云端将备份数据恢复到手机,确保您的通信记录永不丢失。 [![应用主界面](https://raw.gitcode.com/gh_mirrors/sms/sms-ba

gitblog_00756的博客 1323

基因家族扩张收缩分析可视化(CAFE5)

CafePlotter 是一个用于可视化 CAFE5 基因家族扩张收缩分析结果的 Python 工具

xuzhougeng blog 3627

MOS管驱动电路设计全攻略

MOS管驱动电路设计全攻略

让你爱上电路设计 3634

安卓的权限大全和动态使用安卓权限

本文主要记录安卓权限和安卓动态权限及动态权限的使用方法 安卓权限大全 安卓动态权限的使用方法 一、安卓权限大全 常用权限 访问网络 android.permission.INTERNET访问网络连接可能产生GPRS流量 ...

alex_wen2014的博客 417

华为OD统一考试 - 模拟消息队列(Java & Python& JS & C++ & C )

让我们来模拟一个消息队列的运作,有一个发布者和若干消费者,发布者会在给定的时刻向消息队列发送消息,

算法大师! 3517

Android 权限汇总大全

权限 名称 描述 android.permission.ACCESS_CHECKIN_PROPERTIES 访问登记属性 读取或写入登记check-in数据库属性表的权限 android.permission.ACCESS_COARSE_LOCATION 获取错略位置 通过WiFi或移动基站的方式获取用户错略的经纬度信息,定位精度大概误差在30~1500米 android.permissio...

冯旭的博客 6353

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

安卓权限大全

转载:https://www.cnblogs.com/classic/archive/2011/06/20/2085055.html 访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permission.ACCESS_COARSE_LOC...

山楂卷的专栏 728

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android 短信数据库在哪个文件夹,安卓手机的短信备份后存到了哪个文件夹下

打开备份短信的方法:1.通过电脑找回手机短信内容的最基本思路,即将保存手机短信容的数据库文件传输到电信上,用相关手机信看工具进找回,对此需要借助第三方ROOt工获取手机ROOT权限。2.并非所有手机都支持通过第三方ROOT工具来获取级权限,对于小米MIUI稳定版系统,需刷机成开发版,然利用自的ROOT管理工具来获取其ROOT限。3.当成功获取手机ROOT权限后,即可借助RE文件管,将保存手机短信内...

weixin_34730055的博客 4055

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: Android SAX解析xml文件
下一篇: Android调用手机本身的复制功能
技术搬砖工
博客等级 码龄16年 144粉丝 265原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值