最近项目中要做的一个拦截某一个特定号码发来的短信的小功能,遇到到小问题(不得不说有些软件好过分啊),记录一下。
1:拦截系统发送的短信广播
我们知道,系统在收到短信的时候,会发送一个短信广播,而广播的种类又分为有序广播和无序广播,而这个短信广播就是有序广播,我们在收到这个广播之后,可以abort掉,那么优先级在你后面的receiver就会接收不到这个广播了,然后麻烦就来了,有些短信软件比如说youni,360等等就会abort掉后让你接受不到这个广播了,还有一些定制android的rom根本不会让你接收到这个广播,也就是说通过广播来做拦截是有前提的。
package com.android.shop.sms;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.util.Log;
import com.android.shop.Constants;
/**
* 短信拦截器,拦截电信短信平台数据
* @author cg
*
*/
public class SmsReceiver extends BroadcastReceiver {
public static final String TAG = "SmsReceiver";
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
public static final String SENDER_ADDRESS = "106903007090999";//sp短信发送地址,拦截注册时服务商发出短信
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED_ACTION)){
SmsMessage[] messages = getMessagesFromIntent(intent);
for (SmsMessage message : messages){
if(message.getOriginatingAddress().indexOf(SENDER_ADDRESS)!=-1){
Log.d(TAG, message.getMessageBody());
Intent it = new Intent();
it.setAction(Constants.CAN_BIND_PHONE_ACTION);
String key = message.getMessageBody();
it.putExtra("key", key);
context.sendBroadcast(it);
abortBroadcast();
}
}
}
}
public final SmsMessage[] getMessagesFromIntent(Intent intent){
Object[] messages = (Object[]) intent.getSerializableExtra("pdus");
byte[][] pduObjs = new byte[messages.length][];
for (int i = 0; i < messages.length; i++){
pduObjs[i] = (byte[]) messages[i];
}
byte[][] pdus = new byte[pduObjs.length][];
int pduCount = pdus.length;
SmsMessage[] msgs = new SmsMessage[pduCount];
for (int i = 0; i < pduCount; i++){
pdus[i] = pduObjs[i];
msgs[i] = SmsMessage.createFromPdu(pdus[i]);
}
return msgs;
}
}
2:通过ContentObserver监听短信数据库
private ContentObserver smsContentObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(true);
/*Cursor cursor = resolver.query(
Uri.parse(SMS_INBOX_URI),
new String[] { "_id", "address", "thread_id", "date",
"protocol", "type", "body", "read" },
" address=? and read=?", new String[] {SENDER_ADDRESS, "0"},
"date desc");*/
[color=red]//注释掉的是查未读状态的,但如果你的手机安装了第三放的短信软件时,他们有可能把状态改变了,你就查询不到数据[/color]
Cursor cursor = resolver.query(
Uri.parse(SMS_INBOX_URI),
new String[] { "_id", "address", "thread_id", "date",
"protocol", "type", "body", "read" },
" address=?", new String[] {SENDER_ADDRESS},
"date desc");
while(cursor.moveToNext()){
String address = cursor.getString(cursor.getColumnIndex("address"));
String body = cursor.getString(cursor.getColumnIndex("body"));
String id = cursor.getString(cursor.getColumnIndex("_id"));
resolver.delete(Uri.parse("content://sms/"+id), null, null);
Log.d("短信平台发来的短信---", address+":::::"+body);
break;
}
}
};
@Override
protected void onResume() {
super.onResume();
ContentResolver resolver = getContentResolver();
resolver.registerContentObserver(Uri.parse(SMS_URI), true,smsContentObserver);
}
public static final String SMS_URI = "content://sms/";//1.6下的系统
public static final String SMS_URI = "content://mms-sms/";[color=red]//1.6+的系统,要不然有些rom会onChange执行不了,也就是监听不了[/color]
public static final String SMS_INBOX_URI = "content://sms";
分享到:
相关推荐
在Android系统中,实现短信拦截功能主要涉及到两个关键知识点:BroadcastReceiver(广播接收者)和ContentProvider。在Java编程环境下,我们可以通过这两种组件来监听并处理短信消息。 首先,我们需要创建一个...
在Android系统中,短信拦截是一种常见的功能,它允许开发者或者用户对接收到的短信进行过滤、处理或阻止。本文将深入探讨Android短信拦截的核心概念、实现机制以及如何通过源码来理解和开发这样的功能。 首先,...
在Android系统中,短信拦截器是一种机制,允许开发者在短信到达设备时进行处理,比如过滤、存储或响应特定类型的短信。这个"Android 短信拦截器"可能是一个示例项目,展示了如何在Android 4.0.3(Ice Cream Sandwich)...
总的来说,这个iOS5短信拦截小demo是关于如何在iOS系统中利用扩展机制实现短信的拦截和处理的一个教学案例。它对于开发者理解iOS的扩展机制,以及学习如何在安全的沙盒环境下与系统服务交互有着重要的参考价值。不过...
短信拦截技术在移动设备安全领域占据着重要的位置,尤其是在Android系统中,由于其开放性,开发者可以通过编写特定的代码来实现对短信的接收、处理和控制。在这里,我们主要探讨的是Android平台上的短信拦截源码,...
二、短信拦截 1. 创建BroadcastReceiver:首先定义一个继承自BroadcastReceiver的类,重写onReceive()方法,在其中处理接收到的短信。注册该receiver时,需要在AndroidManifest.xml中添加对`<receiver>`元素的声明...
在移动设备上,短信拦截是一种常见的功能,主要用于过滤不必要的垃圾短信,保护用户隐私,防止骚扰。本篇文章将详细讲解如何实现一个短信拦截Demo,以供学习和参考。 首先,我们需要理解短信拦截的核心机制。在...
本文将深入探讨Android 4.4+短信拦截删除的相关知识点。 首先,我们要了解的是`BroadcastReceiver`,这是Android系统中用于监听特定事件(如接收到短信)的重要组件。开发者可以创建一个自定义的`BroadcastReceiver...
2. **短信拦截**:要实现短信拦截,我们需要创建一个BroadcastReceiver,并在它的onReceive()方法中处理接收到的短信。首先,我们需要在AndroidManifest.xml文件中注册BroadcastReceiver,并声明SMS_RECEIVED权限: ...
"MTK功能机短信拦截方法"是指在搭载MediaTek芯片的功能手机上实现对短信的拦截和处理的一种技术手段。这个技术对于开发远程控制手机的应用尤其关键,因为它允许程序在用户不知情的情况下接收和响应特定的短信指令。 ...
在Android系统中,MMS(Multimedia Messaging Service)短信是一种用于发送多媒体内容的通信方式,除了文字外,还可以包含图片、音频和视频等。在Android 5.1版本中,开发MMS短信拦截功能是一项重要的任务,特别是...
2. 处理性能:系统需要有高效的数据处理能力,确保在高并发情况下仍能快速准确地完成短信拦截。 3. 操作:界面友好,易于操作,提供清晰的系统操作指南和故障排除工具。 4. 可扩展性:设计时考虑未来功能扩展和技术...
在Symbian操作系统中,短信拦截功能是一种重要的安全特性,它允许用户阻止不必要的或潜在的恶意短信。"短信拦截类"通常是指一个编程类,开发者可以利用这个类来实现短信的过滤和管理。下面我们将详细探讨Symbian系统...
短信拦截应用程序是一种能够控制和管理手机接收到的短信的应用,它可以阻止特定号码或所有号码的短信在用户手机上显示,提供了一种隐私保护和安全控制的手段。 首先,我们要理解Android系统的权限机制。在Android中...
// 处理短信拦截逻辑 } } } ``` 在`onReceive()`方法中,我们可以检查短信的内容、发件人等信息,然后决定是否允许该短信通过。如果满足拦截条件(例如,号码匹配预设的拦截列表),可以阻止默认的短信处理,...
【短信拦截与黑名单功能】 在现代智能手机中,短信拦截与黑名单功能是用户管理通信、防止垃圾短信和骚扰信息的重要工具。这些功能允许用户定制规则,筛选出不希望接收的短信,提升个人信息安全和隐私保护。 1. **...
二、短信拦截处理方法 1. 基于关键词过滤:系统会设定一个关键词库,当接收到的短信包含这些关键词时,自动拦截。 2. 黑名单制度:用户可以将不想接收短信的号码添加到黑名单,来自这些号码的短信将被拦截。 3. 白...