Android中短信攔截解決方案
Android中短信攔截解決方案
通過測試,Android中是能夠攔截短信的,解決方案以下:
package com.tigertian.sms;
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 {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
System.out.println("SMSReceiver, isOrderedBroadcast()="
+ isOrderedBroadcast());
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++) {
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
if(smsMessage[n].getMessageBody().contains("hahaha")){
this.abortBroadcast();
}
System.out.println(smsMessage[n].getOriginatingAddress()+" "+smsMessage[n].getMessageBody()+" "+smsMessage[n].getIndexOnIcc());
}
}}
<receiver android:name=".SMSReceiver">
<intent-filter android:priority="10000">
<action android:name="android.provider.Telephony.SMS_RECEIVED"></action>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
上面的代碼是一個消息監聽,監聽接收短信的消息。咱們能夠從控制檯打印信息裏面看到,他是一個OrderedBroadcast,根據這一點咱們就能夠對短信機制進行攔截。如何攔截呢?首先要聲明一個消息監聽器,同時根據上面的配置文件須要在AndroidManifest.xml中配置好,注意它的優先級是10000,這一點很關鍵,由於OrderedBroadcast是根據優先級來傳遞消息的,優先級越高越先獲取到消息,待處理完後纔會傳遞給下一個監聽器,若是當前監聽器退出廣播,那麼後面的全部監聽器都將沒法收到消息。其次咱們須要實現onReceive方法,根據上面的代碼,咱們能夠從bundle中拿到短信內容並還原成SmsMessage,這樣咱們能夠根據特定條件來判斷哪些是須要咱們攔截而且不要讓用戶知道的,哪些是咱們能夠放行的。須要咱們攔截的短信,咱們能夠在收到後直接abortBroadcast()(上面的代碼中是判斷當短信內容包含hahaha的時候直接攔截),這樣系統收件箱將沒法接收到該條短信,繼而也就不會有notification去通知用戶。至此,應用編寫好以後,短信攔截功能就完成了,固然基於此還能夠作一些其餘功能,這方面就看需求了。注意,優先級相同,則根據包名依次傳遞廣播。想刪除收件箱中已存在的短信,請參考Android源碼SmsProvider類,能夠在你的應用中使用ContentProvider機制進行操做。
歡迎關注本站公眾號,獲取更多信息