Android系统开发:短信的号码拦截
Code:Android源码
功能要求:针对某号码,短信的接收与发送的监听与拦截。
设备对该号码发送短信的拦截
实现思路 : 应用发送短信(无论是否是默认短信),在它将该条数据写入/sms/sent/数据库中前,检查是否是我们需要拦截的号码 ,如果是 则return操作, 那么就可以实现对于发送短信的拦截。
Path: frameworks/opt/telephony/src/java/com/android/internal/telephony/SMSDispatcher.java
1)找到内部类 Smstracker
2)修改以下代码
void writeSentMessage(Context context, int phoneId) {
String text = (String) mData.get("text");
+ if (mDestAddress != null) {
+ if (mDestAddress.equals(“110”) || mDestAddress.equals("112")) {
+ Log.d(TAG,"This SMS does not enter the database");
+ return;
+ }
+ }
...
}
public void updateSentMessageStatus(Context context, int status) {
+ if (mDestAddress != null) {
+ if (mDestAddress.equals(“110”) || mDestAddress.equals("112")) {
+ Log.d(TAG,"This SMS does not enter the database");
+ return;
+ }
+ }
...
}
void writeSentMessage(Context context) {
+ if (mDestAddress != null) {
+ if (mDestAddress.equals(“110”) || mDestAddress.equals("112")) {
+ Log.d(TAG,"This SMS does not enter the database");
+ return;
+ }
+ }
...
}
设备接收短信的拦截
实现思路:在接受到短信之后,将该短信不做任何处理即可,那么我们只要找到接收短信后处理短信的方法,在该方法里对收到的短信号码做出拦截处理就可以了,当然你也可以做一些其他的操作。
Path:packages/apps/Mms/src/com/android/mms/transaction/SmsReceiverService.java
1)找到方法handleSmsReceived
2)修改以下代码
private void handleSmsReceived(Intent intent, int error) {
SmsMessage[] msgs = Intents.getMessagesFromIntent(intent);
+ SmsMessage tempsms = msgs[0];
+ if (tempsms.getOriginatingAddress() != null && !"".equals(tempsms.getOriginatingAddress())){
+ if (tempsms.getOriginatingAddress().equals("110")) {
+ Log.d(TAG, "This message is not processed");
+ return;
+ }
+ }
...
}
其实实现的方式有很多 ,Android系统十分的复杂,所以解决问题的方法和思路需要更加直接、更加简单一点,要不然很容易陷入整个代码海里无法自拔。