热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android学习开发笔记之一短信拦截Receiver

目的:实现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


推荐阅读
author-avatar
魏建菁雅湖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有