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>

短信的拦截

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

提高优先权:

阻断传播:

短信的删除

以下是短信相关的协议

content://sms/inbox    收件箱
content://sms/sent    已发送
content://sms/draft    草稿
content://sms/outbox    发件箱
content://sms/failed    发送失败
content://sms/queued    待发送列表

就拿收件箱为例实现短信的删除代码如下:

实现删除短信中包含某一字段的短信:

public void deleteSMS(String smscontent) { ContentResolver CR = getContentResolver(); try { // 准备系统短信收信箱的uri地址 Uri uri = Uri.parse("content://sms/inbox"); // 查询收信箱里所有的短信 Cursor cursor = CR.query(uri, new String[] { "_id", "address", "person", "body", "date", "type" }, null, null, null); int count = cursor.getCount(); if (count > 0) { while (cursor.moveToNext()) { String body = cursor.getString(cursor.getColumnIndex("body"));// 获取信息内容 if (body.contains(smscontent)) { int id = cursor.getInt(cursor.getColumnIndex("_id")); CR.delete(Uri.parse("content://sms"), "_id=" + id, null); } } } } catch (Exception e) { Log.v("e", e.getMessage()); } }

根据最新的短信实现删除信息(删除的对象是联系人而非短信)

public void deleteSMS() { ContentResolver CR = getContentResolver(); // 查询收信箱里所有的短信 Cursor cursor = CR.query(Uri.parse("content://sms/inbox"), new String[] { "_id", "thread_id" }, null, null, null); if (cursor != null) { cursor.moveToFirst(); int a = cursor.getCount(); int b = cursor.getColumnCount(); long threadId = cursor.getLong(1); CR.delete(Uri.parse("content://sms/conversations/" + threadId), null, null); } }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

时间: 2024-09-10 23:08:24

Android项目实现短信的发送、接收和对短信进行拦截的相关文章

Android项目实现短信的发送、接收和对短信进行拦截_Android

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

详解Android短信的发送和广播接收实现短信的监听_Android

本文介绍了Android短信的发送和广播接收者实现短信的监听,要注意Android清单中权限的设置以及广播的注册监听实现,废话不多说,代码如下: 以下就是 Android清单的XML AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zyw.broadcastsendsms" android:versionC

详解Android短信的发送和广播接收实现短信的监听

本文介绍了Android短信的发送和广播接收者实现短信的监听,要注意Android清单中权限的设置以及广播的注册监听实现,废话不多说,代码如下: 以下就是 Android清单的XML AndroidManifest.xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zyw.broadcastsendsms" android:versionC

Android短信群发 发送报告问题

问题描述 Android短信群发 发送报告问题 现在把所有的号码都保存到了AllNumbersList列表里,现在发送的话,只能是每条信息都接受状态.举例说明现在的效果是:每发一条信息(比如ABC),A的发送和回执状态Toast显示一次,然后B的再显示,然后再C的--依此类推...而需要的效果:所有信息发送成功后(如果发送的时候能显示进度最好,我想的是使用progressBar,不知道还有没有更好的办法?),显示为短信全部发送完毕,或者哪条没有发送成功把单条列出来.接受回执报告也是如此.不知道各

Android使用第三方服务器Bmob实现发送短信验证码_Android

调用Bmob第三方服务器实现短信验证的功能,大致思路如下: 随机产生6位数字,然后调用Bmob的请求短发函数发送者六位数到服务器,然后服务器给指定手机发送这6位验证码,然后感觉用户输入的数字进行判断,如果输入的和发送的相等,则验证成功. 第一步.请求验证码: SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sendTime = format.format(new Date());

Android短信接收监听、自动回复短信操作例子_Android

定义广播接收器的Action: 复制代码 代码如下: private static final String TAG ="SmsService";/*** 信息发送状态广播*/private static final String ACTION_SMS_SEND  = "com.SmsService.send";  /*** 信息接收状态广播*/private static final String ACTION_SMS_DELIVERY = "com.S

Android短信接收监听、自动回复短信操作例子

定义广播接收器的Action:复制代码 代码如下:private static final String TAG ="SmsService";/*** 信息发送状态广播*/private static final String ACTION_SMS_SEND  = "com.SmsService.send";  /*** 信息接收状态广播*/private static final String ACTION_SMS_DELIVERY = "com.Sms

搭建亿万级别短信服务发送平台

写在开始 阿里云的小伙伴们,走过路过,千万不要错过.之所以起这么唬人的标题,其实就是想让路过的您点一下,顺便关注一下博主.当然你也可以默默地顶完文章然后转身就走人,但是动作一定要快,姿势必须要帅,深藏功名尘与土. 阿里大鱼 阿里大鱼去哪了,这么牛掰的名字,居然被阿里云抛弃了? 显然不是,进入短信后台.阿里云还是给了提示:原短信服务已停止开通. 感谢你对短信服务产品的支持,原短信服务(整合在消息服务内)已停止开通.请前往短信服务控制台,开通新短信服务. 很明显短信服务被整合到消息服务中去了,阿里大

限制一分钟只能发送一次手机短信

为什么要限制一分钟之内只能发送一次手机短信呢? 防止恶意攻击. 什么场景需要发送手机短信? (a)手机号注册 (b)通过手机找回密码 (c)手机号绑定,手机号换绑 (d)转账时手机号接收动态口令(一次一密)   1,前端 一般前端会有倒计时,在倒计时的过程中是不允许点击"发送短信"按钮的: 但是如果用户刷新页面呢? 如果刷新页面,那么页面的倒计时就会中断.  这是需要服务器端提供支持:服务器端要记录上次发送短信的时间戳   2,后台 第一次发送时lastSendSMSTime 为nul