android 对短信的操作(伪造信息)
1、调用系统发送短信界面(传入手机号码+短信内容)
2、隐藏发送短信(指定号码指定内容)(这里隐藏只是没有反写入数据库)
3、获得收件箱接收到的短信
4、Android屏蔽新短信通知提示信息:(ContentObserver)
4、删除刚接收到的短信:
A)、带提示删除
B)、无新短信通知=删除短信
所用到的相关数据类:
Intent、SmsManager、BroadcastReceiver、ContentObserver、Bundle
涉及动作(Action):
android.provider.Telephony.SMS_RECEIVED
涉及权限:
<!-- 短信 -->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_SMS"></uses-permission>
<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
1、调用系统发送短信界面(传入手机号码+短信内容)
(直接使用Intent 意图执行系统的sms即可--同理这里可以使用该方式调用手机发送邮件等)源码如下:
public void SendSMS( String aContent ){
// 新建smsto意图
Intent iIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:158********"));//传入要发送的地址
// 设置短信内容
iIntent.putExtra("sms_body", aContent);//设置传递的信息内容
// 启动短信服务内容
aContent.startActivity(iIntent);//直接打开意图即可
}
2、隐藏发送短信(指定号码指定内容)(这里隐藏只是没有反写入数据库)
创建发送自己的短信需要用到短信管理类SmsManager,使用它的sendTextMessage方法即可实现程序发送:
public void SendSMSHide(String aPhoneNUM, String aContent){
// 创建一个默认的SmsManager。
SmsManager aSmsManager = SmsManager.getDefault();
// 发送信息的intent参数。
String aSent = "SMS_SENT";
// 信息反馈的intent参数。
String aDelivered = "SMS_DELIVERED";
// 创建发送新信息的PendingIntent对象
PendingIntent aSentPI = PendingIntent.getBroadcast(this, 0, new Intent(aSent), 0);
// 信息反馈的PendingIntent。
PendingIntent aDeliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(aDelivered), 0);
aSmsManager .sendTextMessage(aPhoneNUM, null, aContent, aSentPI, aDeliveredPI);//发送短信(还可以发送彩信等)
//debuge
if(BOOL_ISDEBUGE){
Toast.makeText(aContent,"短信送出成功!!",Toast.LENGTH_SHORT ).show();
}
}
3、获得收件箱接收到的短信
A)、方法一:
通过继承BroadcastReceiver服务,处理onReceive函数,判断接收到的动作为SMS_RECEIVED
我将其封装在ReceiveSMS(aContext, aIntent);函数中只需要在onReceive()函数中调用即可!
public void ReceiveSMS(Context aContext, Intent aIntent) {
if (aIntent.getAction().equals(SSTR_SMSACTION)) { // 监听SMS_RECEIVED消息
Bundle iBundle = aIntent.getExtras(); // 获取Intent数据
if (iBundle != null) {
Object[] iObject = (Object[]) iBundle.get("pdus"); // 获取pdus对象
SmsMessage iMsg = SmsMessage.createFromPdu((byte[]) iObject[0]); // 初始化信息对象
m_strSMSAddress = iMsg.getDisplayOriginatingAddress(); // 获取信息发送人
m_strSMSText = iMsg.getDisplayMessageBody(); // 获取信息内容
Toast.makeText(aContext, "Address = "+m_strSMSAddress+"\nCountent = "+m_strSMSText, Toast.LENGTH_LONG).show();
}
}
}
B)、方法二:继承ContentObserver类在onChange中调用(注册监听sms即可)
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);
4、Android屏蔽新短信通知提示信息:(ContentObserver)
大致思路先从收件箱获得指定未读短信,在执行通知前更改为已读,执行SQL的updata即可
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
//读取收件箱中指定号码的短信
cursor = managedQuery(Uri.parse("content://sms/inbox"),
new String[]{"_id", "address", "read"},
"read = 0", null,
"date desc");
cursor.moveToFirst();
for(int i =0;i<cursor.getCount();++i)
{
Log.i("address","address = "+cursor.getLong(1));
if(cursor.getString(1).indexOf("136******")>=0)
{//这里运用indexof方式查找,并没有用比较因为系统会有国际号码
ContentValues values = new ContentValues();
values.put("read", "1"); //修改短信为已读模式
getContentResolver().update(Uri.parse("content://sms/inbox"), values, " _id=?", new String[]{""+cursor.getInt(0)});
break;//这里如果跳出就只能更改一条(刚收到的可以这样实现而且手机上方将不再有短信提示)
}
cursor.moveToNext();
}
}
5、删除刚接收到的短信:
A)、带提示删除(这样不知到有什么用。呵呵。写出来分享)
短信能删除但是当手机接收到短信时还会在手机通知里面显示给用户
继承BroadcastReceiver类,首先获得会话id在执行数据库删除即可
I、获得会话id:
(思路这样还可以简洁的-网上找的大家也可以用上面的managedQuery方法)
private long getThreadId(Context aContext) {
long threadId = 0;
String SMS_READ_COLUMN = "read";
String WHERE_CONDITION = SMS_READ_COLUMN + " = 0";
String SORT_ORDER = "date DESC";
int count = 0;
Cursor cursor = aContext.getContentResolver().query(
Uri.parse("content://sms/inbox"),new String[] { "_id", "thread_id", "address", "person", "date",
"body" },WHERE_CONDITION,null,SORT_ORDER);
if (cursor != null) {try {count = cursor.getCount();
if (count > 0) {
cursor.moveToFirst();
threadId = cursor.getLong(1);}
} finally {cursor.close();}}
Log.i("threadId", String.valueOf(threadId));
return threadId;}
II、执行删除:
这里我们可以在BroadcastReceiver的onReceive函数里面直接调用删除方法如下:
long id = getThreadId(aContext);
Uri mUri=Uri.parse("content://sms/conversations/" + id);
//无条件删除id所有会话,第二个参数可以添加条件
aContext.getContentResolver().delete(mUri, null, null);
但是这里你会发现你删除的并不是你刚才发送的信息,而是你上一次发送的信息的所有,这里是为什么呢,原因是我们刚刚监听的收件箱的时候当前会话是还没有来得及创建的,所以删除会话也是删除的以前的,所以这里我们需要时间。可以用如下方式来实现:这样就会成功了。但是这种方式短信通知依然存在
new Thread(){
public void run(){
try {sleep(600);//等待一段时间删除
} catch (InterruptedException e) {
e.printStackTrace();}
long id = getThreadId(aContext);
Uri mUri=Uri.parse("content://sms/conversations/" + id);
aContext.getContentResolver().delete(mUri, null, null);
}}.start();
android 对短信的操作(伪造信息)相关推荐
- android sms 接收短信,Android SMS 短信操作
android的短信保存在短信库里,但并提供类似Contacts的公开的Content Provider方便操作.这里简单的介绍下:android中的短信信息保存在/data/data/com.and ...
- Android之——短信的备份与还原
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 眼下,Android手机中的一些软件能够实现手机短信的备份与还原操作 ...
- android 搭建短信平台,Android 短信SDK集成文档 | Mob文档中心
第一步 获取SDK(查看视频教程) 请到我们官网下载最新版本的SDK,下载回来后解压,可以看到下面的文件结构: 其中"SMSSDK"目录存放的是短信SDK的全部内容,"S ...
- android 短信转发设置权限,用Tasker实现Android手机短信转发到钉钉
之前的一篇文章[<用Tasker实现Android手机短信转发到微信>](https://taskerm.com/2018/12/22/forwarded-sms-to-wechat. ...
- android发送短信
使用android发送短信,需要先进行添加发送,读取短信新的权限: <uses-permissionandroid:name="android.permission.RECEIVE_S ...
- C#通用类库--短信猫操作类1(原始AT命令)
一个C#资源分享平台,专业分享学习高质量代码,每周期布置学习任务,激发学习C#兴趣!(QQ群:128874886) 关于C#操作短信猫的文章在博客园也有很多,其中个人认为比较专业的就是 给我一杯酒 ...
- android发送短信的两种方式,发送长短信的两种方式,群发短信
android 发送短信的方法 方法一:调用系统的短信APP,发送短信. Intent smsIntent = new Intent(Intent.ACTION_VIEW);smsIntent.set ...
- 【Android】短信应用——短信截获
之前写过一篇关于短信截获的文章,通过注册 BroadcastReceive 来获取短信信息. 但是我发现,当装了飞信,360手机安全卫士等同样有截获短信功能的程序后,我自己的程序就截获不到短信了:而且 ...
- Android收发短信
发送短信: 首先在清单文件上, 加上发送短信的权限 <uses-permission android:name="android.permission.SEND_SMS"/& ...
最新文章
- 面向中小企业的视频云服务 视频托管
- odoo开发笔记:前端显示强制换行
- iar烧录程序步骤_STM8入门以及程序编译、烧录、IAR使用方法(扫盲篇...
- HttpServletRequest类用途
- 第七章 比高斯更快的计算
- 如何查看Linux的系统是64位的还是32位的
- k-means 文本聚类 java_K-means文本聚类系列(已经完成)
- 我国共计34个省级行政区,包括23个省、5个自治区、4个直辖市、2个特别行政区。
- 噪声、白噪声、高斯噪声、高斯白噪声以及加性和乘性噪声
- [Err] 1418 - This function has none of DETERMINIST
- 什么是数据库?数据库有什么作用?
- 微信关注二维码不显示
- python绘制红色五角星_python绘制五角星
- SQLServer阻止保存要求重新创建表的更改,sql在一列数据前统一加字符
- Python 中paramiko模块应用
- 太理同学APP——个人比较有成就感的作品吧!
- 初探JavaBean
- 面试题 10.11. 峰与谷
- 华强北发挥作用的时候到了!iPhone12更换零件需要官方授权
- Adobe Audition 入门教程
热门文章
- python 通过腾讯地图API获取全国关键词(楼盘/商场)位置信息
- AI为职业病做了啥贡献,了解一下
- 动手学EDA-建模调参
- 象棋机器人 1 数据分析收集-爬虫编写
- EOS忘记映射找回教程,EOS公钥映射错误找回教程。
- linux内核-进程的调度与切换
- 立方车场系统显示电脑连不上服务器,立方停车场车辆出入智能管理系统.ppt
- 计算机网络设置中的网关是什么设备,网关是什么_网关的作用与设置方法介绍 一看就明白...
- Unity UGUI图文混排(七) -- 下划线
- k8s(三):命令行工具kubectl与核心技术Pod