Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> android安全問題(五) 搶先攔截短信 - 結果篇

android安全問題(五) 搶先攔截短信 - 結果篇

編輯:Android開發教程

同上篇文章一樣,這裡只陳述結果,代碼分析稍後給出

導讀:本文敘述如何先於某些偽殺毒軟件 、病毒、常規軟件獲取到短信

注意:如果你想搶先接收到短信,請務必閱讀我上一篇文章,先要保證 你的應用最先開機啟動

眾所周知,android系統在收到短信息的時候會發送廣播,但是此廣播是有序廣 播,也就是說:先接收到廣播的人,如果心情不好,它就不會向後傳遞此廣播,後面的人就不會知道有短信到 來

這與無序廣播不同,無序廣播並不是真的沒有順序(只是似乎大家習慣這麼叫而已),無序廣播的 接收者也是排隊等待廣播的,只不過是在傳遞過程中,大家必須遵守規則,一直把消息傳遞給最後一個人才可 以

關於無序廣播與靜態接收器搭配的接收順序,上一篇文章已經說的很清楚了

由於開機 之後程序都沒有開始運行,所以想自動運行必須要接收

現在我們看看程序啟動之後的情況,我以大家 關心的接收短消息為例

想要在程序中接收短信,就要接收如下廣播

android.provider.Telephony.SMS_RECEIVED

系統把它作為有序廣播進行發送,那麼,誰第一 個接收到短信將變得至關重要,無論你是殺毒軟件、偽殺毒軟件、病毒還是普通程序

之前說過靜態接 收器的接收順序

那麼動態接收器和靜態接收器相比呢?

如果是接收靜態廣播

答案是靜 態接收器優先級低於動態接收器,也就是說,無論多麼高級別的靜態接收器和多麼低級別的動態接收器都接收 同一廣播,永遠都是動態接收器先接收到!

動態接收器是在代碼中設置的,所以,我們需要先啟動程 序,才能接收廣播,這也是我們無法用它接收開機廣播的原因

如果是接收動態廣播

同優先級的 ,動態接收器先接收到廣播,靜態後接收到

同樣的,動態接收器也可以設置優先級,高優先級的接收 器會在低優先級的接收器之前接收到廣播

那麼,同樣優先級的動態接收器,接收廣播的順序是怎樣的 呢?

幸好,他們的規則與靜態接收器的規則不同

同樣優先級的動態接收器,誰先注冊到系統, 誰就搶先接收到廣播

上面雖然完全只是文字敘述,但我相信,大家也是看明白了的

下面總結 一下,如何能保證自己的程序搶先於其他程序接收到短信

1.根據上一篇文章的做法,保證自己先於其 他程序啟動

2.啟動第一個事情就要開啟服務,動態注冊廣播,並把優先級設置為最高

代碼實現 也非常簡單

一個接收器

private DynamicReceiver dynamicReceiver = new 

DynamicReceiver();  
public class DynamicReceiver extends BroadcastReceiver {  
    public void onReceive(Context context, Intent intent) {  
        Log.e(SmsUtil.TAG, "dynamic receiver");  
        String action = intent.getAction();  
        if(SmsUtil.SMS_ACTION.equals(action)){  
            context.startService(SmsUtil.getIntent(context, MainService.class, intent, "dynamic 

receiver"));  
        }  
    }  
}

動態注冊

public static final String SMS_ACTION = 

"android.provider.Telephony.SMS_RECEIVED";  
      
IntentFilter intentFilter = new IntentFilter(SMS_ACTION);  
intentFilter.setPriority(Integer.MAX_VALUE);  
registerReceiver(dynamicReceiver, intentFilter);

最後總結一下,接收器接收廣播的順序

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved