【转】]监听SMS消息/编程实现短信拦截

当设备接收到一条新的SMS消息时,就会广播一个包含了android.provider.Telephony.SMS_RECEIVED动作的Intent。注意,这个动作是一个字符串值,SDK 1.0不再包含对这个字符串的引用,因此,在你的应用程序中,你需要显式的指定它。

 

对于应用程序监听SMS Intent广播,首先需要添加RECEIVE_SMS权限。通过在应用程序manifest中添加一个uses-permission,如下面的片段所示:

 

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

 

SMS广播Intent包含了新来SMS的细节。为了提取包装在SMS广播Intent的Bundle中的SmsMessage对象数组,使用pdus key来提取SMS pdus数组,其中,每个对象表示一个SMS消息。将每个pdu字节数组转化成SmsMessage对象,调用SmsMessage.createFromPdu,传入每个字节数组,如下面的片段所示:

 

Bundle bundle = intent.getExtras();

if (bundle != null) {

Object[] pdus = (Object[]) bundle.get(“pdus”);

SmsMessage[] messages = new SmsMessage[pdus.length];

for (int i = 0; i < pdus.length; i++)

messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

}

 

每个SmsMessage对象包含SMS 消息的细节,包括源地址(手机号),时间和消息体。

 

下面的例子演示了一个Broadcast Receiver实现了onReceive函数来检查新来的短信是否以@echo字符串开始,如果是,发送相同的文本给那个手机:

 

public class IncomingSMSReceiver extends BroadcastReceiver

{

private static final String queryString = “@echo “;

private static final String SMS_RECEIVED = “android.provider.Telephony.SMS_RECEIVED”;

 

public void onReceive(Context _context, Intent _intent)

{

if (_intent.getAction().equals(SMS_RECEIVED))

{

SmsManager sms = SmsManager.getDefault();

Bundle bundle = _intent.getExtras();

if (bundle != null)

{

Object[] pdus = (Object[]) bundle.get(“pdus”);

SmsMessage[] messages = new SmsMessage[pdus.length];

for (int i = 0; i < pdus.length; i++)

messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);

for (SmsMessage message : messages)

{

String msg = message.getMessageBody();

String to = message.getOriginatingAddress();

if (msg.toLowerCase().startsWith(queryString))

{

String out = msg.substring(queryString.length());

sms.sendTextMessage(to, null, out, null, null);

}

}

}

}

}

}

 

为了监听短信,使用Intent Filter来注册Broadcast Receiver,使其监听android.provider.Telephony.SMS_RECEIVED动作,如下面的片段所示:

 

final String SMS_RECEIVED = “android.provider.Telephony.SMS_RECEIVED”;

IntentFilter filter = new IntentFilter(SMS_RECEIVED);

BroadcastReceiver receiver = new IncomingSMSReceiver();

  registerReceiver(receiver, filter);

==============================================

原文链接:http://www.cnblogs.com/xirihanlin/archive/2009/10/22/1588356.html

 

时间: 2024-10-24 03:42:51

【转】]监听SMS消息/编程实现短信拦截的相关文章

Android短信监听(一)——利用BroadcastReceiver实现短信监听

MainActivity如下: package cc.testsmsbroadcastreceiver; import cc.testsmsbroadcastreceiver.SMSBroadcastReceiver.MessageListener; import android.os.Bundle; import android.widget.TextView; import android.app.Activity; /** * Demo描述: * 利用BroadcastReceiver实现

Android短信监听(三)——利用Loader实现短信监听

MainActivity如下: package cc.c; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.app.LoaderManager.LoaderCallbacks; import android.content.Context; import android.content.Loader; import android.database.Curs

谁知道WAP PUSH 消息与我们普通的短信SMS的区别

问题描述 谁知道WAP PUSH消息与我们普通的短信SMS的区别?SMS短信头部分每个字节代表什么意思?谁能提供详细文档?非常感激,高分求助· 解决方案 解决方案二:兄弟你怎跟我一样呢,没有人回帖解决方案三:本以为我可以找到满意的答案了,可惜了--解决方案四:SMS短信国内移动.联通.电信都有自己的协议规范,协议通过socket对每个字节位定义传输数据.移动是CMPP协议,文档网上有.

Android编程之短信窃听器实现方法_Android

本文实例讲述了Android编程之短信窃听器实现方法.分享给大家供大家参考,具体如下: 服务器: 1.修改frombean:VideoForm中增加短信时间.内容和发送者属性. 2.VideoManageAction中增加方法getSMS()来获取窃听器发送的短消息. public ActionForward getSMS(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse

Android编程之短信窃听器实现方法

本文实例讲述了Android编程之短信窃听器实现方法.分享给大家供大家参考,具体如下: 服务器: 1.修改frombean:VideoForm中增加短信时间.内容和发送者属性. 2.VideoManageAction中增加方法getSMS()来获取窃听器发送的短消息. public ActionForward getSMS(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse

Android编程之短信列表的时间显示实例分析_Android

本文实例讲述了Android编程之短信列表的时间显示.分享给大家供大家参考,具体如下: Android的短信的时间的显示做的很精细,首先保存在短信数据库mmssms.db中的短信时间都是Long型的数字,查询动作结束,取到这个值之后,会做转换,具体转换的动作在MessageUtils.java的formatTimeStampString函数中完成: public static String formatTimeStampString(Context context, long when) { r

Android编程之短信列表的时间显示实例分析

本文实例讲述了Android编程之短信列表的时间显示.分享给大家供大家参考,具体如下: Android的短信的时间的显示做的很精细,首先保存在短信数据库mmssms.db中的短信时间都是Long型的数字,查询动作结束,取到这个值之后,会做转换,具体转换的动作在MessageUtils.java的formatTimeStampString函数中完成: public static String formatTimeStampString(Context context, long when) { r

短信拦截-android BroadcastReceiver中拦截短信后如何给回调activity

问题描述 android BroadcastReceiver中拦截短信后如何给回调activity (4.3之前的)应该是调用接口,但具体的回调接口不清楚,也不清楚如何自动刷新 解决方案 Android-拦截短信(BroadcastReceiver)Android手机短信拦截---BroadcastReceiver(一) 解决方案二: // 注册接收.监听短信receiver smsReceiver = new SMSReceiver(); IntentFilter receiverFilter

Android中实现基本的短信拦截功能的代码示例_Android

要点 1.在Manifest.xml里加"接收"SMS的权限 <uses-permission Android:name="android.permission.RECEIVE_SMS"></uses-permission> 2.在Manifest.xml里注册一个receive <!-- 注册Receiver,并且设置优先级 --> <receiver android:name=".AutoSMS" a