Android从普通发送和接收短信到对短信进行拦截

概述:

说实话,关于Android中对短信的一些相关操作是一个比较入门的东西。那我现在还要来写这一篇博客的原因只是因为现在开发中有相关内容,而又想将这些东西分享给更多的人来学习,同时在以后对Android系统的短信进行其他学习的时候也就放在这里做一个记录了,于是就写了这篇啰嗦的文章。如果你觉得这是一个不错的东西,欢迎收藏,以便在以后更方便地查看本人在此篇文章中更新的内容。下面我就从标题中的三个方面来对Android系统中的短信操作进行一个简单地学习。

短信的发送

由于Android中对短信发送方法的优良封装,之后对发送短信的开发就显得异常的简单了。

public static void sendMessage(Context context, String content, String phoneNumber) {
        SmsManager sms = SmsManager.getDefault();
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, new Intent(), 0);
        sms.sendTextMessage(phoneNumber, null, content, pi, null);
    }

别忘了还有权限问题:

<uses-permission android:name="android.permission.SEND_SMS" />

短信的接收

对于短信息的接收相对来说会复杂一些。而复杂的原因大家也应该比较容易理解——接收是不可控制的。也就是说我们的手机根本不知道什么时候会有一条短信息过来。由于过于被动,Android的机制中就出现了一个强大到让你佩服的东西,那就是广播接收者。我们注册一个广播接收者,然后让这个广播接收者时时刻刻地去监听短信息是否到达的这一事件。就这样,被动触发事件完美地解决了。下面让我们来看看这个过程:

public void onReceive(Context context, Intent intent) {

        if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
            Bundle bundle = intent.getExtras();

            Object messages[] = (Object[]) bundle.get("pdus");
            SmsMessage smsMessage[] = new SmsMessage[messages.length];
            for (int n = 0; n < messages.length; n++) {
                smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
            }
            showToast(context, "短信内容: " + smsMessage[0].getMessageBody());
        }
    }

添加权限:

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />

以及在manifest中进行一个静态注册:

<receiver android:name=".broadcast.SMSReceiver" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>

短信的拦截

在能够接收短信的基础上做一个短信拦截倒是简单了许多。因为能够接收,所以我只要成为第一个接收的人,并把接收到的短信不再向下传播,这就完成了短信息的拦截了。

提高优先权:

阻断传播:

时间: 2024-10-11 13:33:28

Android从普通发送和接收短信到对短信进行拦截的相关文章

Android 自定义广播发送和接收

android系统会发送许多系统级别的广播,比如屏幕关闭,电池电量低等广播.同样应用可以发起自定义“由开发者定义的”广播.广播是从一个应用内部向另一个应用发送消息的途径之一. BroadcastReceiver是一个可以监听和响应广播的组件.本文中,我们将会演示如何发送自定义广播以及如何通过编程和使用Manifest文件定义一个BroadcastReceiver来监听这一广播.我们最后只要调用sendBroadcast就可以发送广播信息了. 1,编写MyReceiver,MyReceiver代码

android中如何发送及接收数据(两种方法)?

1.如在MainActivity.java中的按钮点击时设置: //发送数据方法1--简单型 i.putExtra("txt", "没错,我就是刚传来的信息!"); //发送数据方法2--复杂型 Bundle data = new Bundle(); data.putString("txt", "额,我是复杂型的数据方法发送来的!"); i.putExtras(data); 当含有返回值时,启动时用startActivityF

Android 使用EventBus发送消息接收消息

基本使用 自定义一个类 public class LoginEvent { private String code;//是否成功 public LoginEvent(String code) { this.code = code; } public String getCode() { return code; } public void setCode(String code) { this.code = code; }} 在要接收消息的页面注册: eventBus.register(this

android基础----&gt;发送和接收短信

收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.今天我们开始自己创建一个简单的发送和接收短信的应用. 目录导航 接收短信 发送短信 友情链接 接收短信 项目的结构如下:一个简单的接收和发送短信的功能 一.定义一个接收短信的广播:当手机接收到一条短信的时候,系统会发出一条值为android.provider.Telephony.SMS_RECEIVED 的广播,这条广播里携带着与短信相关的

发送与接收短信

权限: <uses-permission android:name="android.permission.READ_SMS"></uses-permission> < uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 发送短信: 1. 获得默认的消息管理器 2. 通过sendTextMessage发送短信. Sm

Android软件开发之发送短信与系统短信库解析

今天我和同学们讨论一下Android平台下如何调用系统方法发送短信.接收短信.系统的短信库相关的问题.进入正题,我们先使用Eclipse工具模拟给自己的模拟器发送一条短信.在Eclipse下打开DDMS Incoming number: 这里须要填写的是发件人的手机号码,这里只能输入数字否则会无法发送. Message: 这里为发送的内容send: 上面两项都填写完毕点击发送键可以给模拟器发送短信. <ignore_js_op> 点击发送后,模拟器中就可以看到自己收到了一条消息 发件人的号码为

通过RS232发送和接收短信(一)

通常,发送和接收短信的终端都是通过串行接口连接电脑,这类设备用得比较多的是GSM Modem和手机.这类设备通常都支持PDU模式,但仍有少数设备只支持Text模式. 设备硬件连接好以后可以通过发送AT指令测试设备是否连接正确能否正常通讯.在这里我使用Windows自带的"超级终端"工具进行通讯.此工具可以在程序--附件--通讯里面找到,如果没有请确认是否安装了此组件.或者在运行里面输入"hypertrm"也可以快速启动"超级终端". 以下所有范例

Android黑科技,读取用户短信+修改系统短信数据库

安卓系统比起ios系统最大的缺点,相信大家都知道,就是系统安全问题.这篇博客就秀一波“黑科技”. 读取用户短信 Android应用能读取用户手机上的短信,相信已经不是什么新鲜事,比如我们收到的短信验证码,一些app马上就能自动获取并填上验证码,省去我们手动填写验证码.原理就是通过Android的ContentProvider组件间接访问系统的短信数据库,获取所有短信内容.下面来演示一下. 布局很简单,如下: 代码如下: public class MainActivity extends Acti

Android socket 使用PrintWriter和BufferedReader发送和接收出现乱码问题解决

项目中用到了Android和C++的通信,选择了用socket 发送字符的方式,一开始使用的代码是: socket=new Socket(); InetSocketAddress isa = new InetSocketAddress(IP_STR, port); socket.connect(isa, 100); PrintWriter out=new PrintWriter(socket.getOutputStream(),true); BufferedReader recvBuf=new