本文实例讲述了Android编程实现拦截短信并屏蔽系统Notification的方法。分享给大家供大家参考,具体如下:
拦截短信有几个关键点:
1.android接收短信时是以广播的方式
2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限
1
2
3
4
|
< uses-permission android:name = "android.permission.RECEIVE_SMS" > </ uses-permission > < uses-permission android:name = "android.permission.RECEIVE_SMS" > </ uses-permission > |
3.要写个广播接收类
1
2
3
4
5
6
7
8
|
public class smsreceiveandmask extends BroadcastReceiver { private String TAG = "smsreceiveandmask" ; @Override public void onReceive(Context context, Intent intent) { } public class smsreceiveandmask extends BroadcastReceiver { private String TAG = "smsreceiveandmask" ; @Overridepublic void onReceive(Context context, Intent intent) {} |
4.Manifest.xml的receiver标签里要加入intent-filter ,action为
1
2
|
< action android:name = "android.provider.Telephony.SMS_RECEIVED" /> < action android:name = "android.provider.Telephony.SMS_RECEIVED" /> |
5.重要的是要在这个intent-filter上加上priority优先级,以使自己接收到SMS优先于系统或其它软件
1
2
3
4
5
6
7
8
9
10
|
< receiver android:name = ".smsreceiveandmask" > < intent-filter android:priority = "1000" > < action android:name = "android.provider.Telephony.SMS_RECEIVED" /> </ intent-filter > </ receiver > < receiver android:name = ".smsreceiveandmask" > < intent-filter android:priority = "1000" > < action android:name = "android.provider.Telephony.SMS_RECEIVED" /> </ intent-filter > </ receiver > |
6.当自己的程序接收到要屏蔽的SMS后,用 this.abortBroadcast();来结束广播的继续发给别的程序,这样系统就不会收到短信广播了,Notification也不会有提示了
1
2
3
4
5
|
// 第三步:取消 if (flags_filter) { this .abortBroadcast(); } // 第三步:取消if (flags_filter) {this.abortBroadcast();} |
源码如下:
Manifest.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<? xml version = "1.0" encoding = "utf-8" ?> < manifest xmlns:android = "http://schemas.android.com/apk/res/android" package = "com.hwttnet.test.smsreceiveandmask" android:versionCode = "1" android:versionName = "1.0" > < uses-sdk android:minSdkVersion = "3" /> < uses-permission android:name = "android.permission.RECEIVE_SMS" ></ uses-permission > < application android:icon = "@drawable/icon" android:label = "@string/app_name" > < receiver android:name = ".smsreceiveandmask" > < intent-filter android:priority = "1000" > < action android:name = "android.provider.Telephony.SMS_RECEIVED" /> </ intent-filter > </ receiver > </ application > </ manifest > |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<? xml version = "1.0" encoding = "utf-8" ?> < manifest xmlns:android = "http://schemas.android.com/apk/res/android" package = "com.hwttnet.test.smsreceiveandmask" android:versionCode = "1" android:versionName = "1.0" > < uses-sdk android:minSdkVersion = "3" /> < uses-permission android:name = "android.permission.RECEIVE_SMS" > </ uses-permission > < application android:icon = "@drawable/icon" android:label = "@string/app_name" > < receiver android:name = ".smsreceiveandmask" > < intent-filter android:priority = "1000" > < action android:name = "android.provider.Telephony.SMS_RECEIVED" /> </ intent-filter > </ receiver > </ application > </ manifest > |
BroadcastReceiver类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package com.hwttnet.test.smsreceiveandmask; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.telephony.SmsMessage; import android.util.Log; public class smsreceiveandmask extends BroadcastReceiver { private String TAG = "smsreceiveandmask" ; @Override public void onReceive(Context context, Intent intent) { Log.v(TAG, ">>>>>>>onReceive start" ); // 第一步、获取短信的内容和发件人 StringBuilder body = new StringBuilder(); // 短信内容 StringBuilder number = new StringBuilder(); // 短信发件人 Bundle bundle = intent.getExtras(); if (bundle != null ) { Object[] _pdus = (Object[]) bundle.get( "pdus" ); SmsMessage[] message = new SmsMessage[_pdus.length]; for ( int i = 0 ; i < _pdus.length; i++) { message[i] = SmsMessage.createFromPdu(( byte []) _pdus[i]); } for (SmsMessage currentMessage : message) { body.append(currentMessage.getDisplayMessageBody()); number.append(currentMessage.getDisplayOriginatingAddress()); } String smsBody = body.toString(); String smsNumber = number.toString(); if (smsNumber.contains( "+86" )) { smsNumber = smsNumber.substring( 3 ); } // 第二步:确认该短信内容是否满足过滤条件 boolean flags_filter = false ; if (smsNumber.equals( "10086" )) { // 屏蔽10086发来的短信 flags_filter = true ; Log.v(TAG, "sms_number.equals(10086)" ); } // 第三步:取消 if (flags_filter) { this .abortBroadcast(); } } Log.v(TAG, ">>>>>>>onReceive end" ); } } |
希望本文所述对大家Android程序设计有所帮助。