作者:魏建菁雅湖 | 来源:互联网 | 2023-10-10 18:52
目的:实现Android短信拦截目录结构实现思想创建SMSReseiver继承BroadcastReceiver对短信接收进行监听,当手机接收到短信时,将发件人号码与指定的手机号进行
目的:实现Android短信拦截
目录结构
实现思想
创建SMSReseiver继承BroadcastReceiver对短信接收进行监听,当手机接收到短信时,将发件人号码与指定的手机号进行比较,如果相同,则将短信广播中断并将短信内容存储在sd卡根目录下的sms.txt文件中;否则,不做任何处理。
在XML文件中静态注册SMSReceiver,将优先级设为2147483647(int类型最大值,在Android官方文档中给的范围是-1000到1000,但实际并无此上限,设为最大int型可以使其优先响应)。
同时在配置文件中声明所需要的信息接收和读写外存权限
实现源码
SMSReceiver.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.http.util.EncodingUtils;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
public class SMSReceiver extends BroadcastReceiver{
private boolean flag = false;
private String MsgTxt = "";
@SuppressLint("SdCardPath")
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//如果接收到短信则响应该广播
if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
//接收Intent对象当中的数据
Bundle bundle = intent.getExtras();
if(bundle != null){
Object[] pdusObj = (Object[])bundle.get("pdus");
//创建一个SmsMessage类型的数组
SmsMessage[] messages = new SmsMessage[pdusObj.length];
for(int i = 0; i messages[i] = SmsMessage.createFromPdu((byte[])pdusObj[i]);
//将短信发件人与短信内容放到MsgTxt中
MsgTxt = MsgTxt + messages[i].getMessageBody();
if(messages[i].getOriginatingAddress().equals("10001")){
flag = true;
}
}
//messages数组中每一个元素都可以获取到发件人号码,这个地方猜测是因为当短信内容太长时将短信分为多条存储
MsgTxt = messages[0].getOriginatingAddress() + " : " + MsgTxt + "\n";
if(flag){
//新建File对象
File file = new File("/sdcard/" , "sms.txt");
//文件输入输出流
FileOutputStream out;
FileInputStream in;
//判断文件是否存在,如果不存在则创建新文件
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try {
//若文件已存在,首先读取原有文件中的内容保存到old中,
//然后将原有信息与新截取内容合并存放到sd卡根目录下的sms.txt文件中
String old;
in = new FileInputStream(file);
int length = (int)file.length();
byte[] temp = new byte[length];
in.read(temp, 0, length);
//将byte数组用UTF-8编码并存入display字符串中
old = EncodingUtils.getString(temp,"UTF-8");
//关闭文件file的InputStream
in.close();
out = new FileOutputStream(file);
out.write((old + "\n" + MsgTxt).getBytes());
out.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//中断广播
abortBroadcast();
}
}
}
}
}
AndroidManifest.xml
下载链接:http://download.csdn.net/detail/zlyf1101/6485439