只要手機開機有信號,就能收到對方的信息。當設置為來電拒接或黑名單時,如果對方發送短信,手機仍然可以接收到這條短信。短信保存在妳的手機黑名單或拒接電話記錄中,其中不僅包含拒接電話記錄,還包含短信攔截記錄。
短信攔截其實是比較簡單的壹種。網上有很多相關的介紹。在這裏,我主要介紹壹下寫作過程中遇到的壹些問題。
首先,短信攔截的原理是監控短信的廣播,然後判斷短信的數量以及是否被列入黑名單。如果是,就通過廣播結束廣播傳輸。其中,在做這件事的過程中最重要的問題不是接收攔截,而是先接收攔截,因為短信廣播是有序廣播的,所以誰先接收廣播,誰就可以有權結束廣播的傳輸,所以我們實際上必須想辦法將我們接收廣播的權限提高到最高級別。這裏主要有兩種方法,1是設置最大權限值,2是將註冊方法設置為動態註冊。
設置最大權限實際上意味著在註冊廣播時設置最高優先級。Android系統的api說明最大權限為1000,但實際上它接收的是壹個int值,系統沒有在線判斷值,因此我們可以設置int的最大值,並且此權限是最高的。
然後,如果它們都是最大權限,誰的優先級更高,那麽就是第二點,動態註冊監控。因為在源代碼中動態註冊的廣播是在靜態廣播之前放入監控列表中的,所以我們在這裏使用動態註冊來設置監控。
那如果大家都用動態註冊,誰會先收到呢?這個地方似乎與應用程序的包名有關。我不太明白。大概意思是安裝時間越早,優先級越高,系統中軟件包名稱的別名順序也越高(不是我們寫的軟件包名稱的字母順序)。
那我們來看看具體的實現。首先,構建壹個服務,然後確保該服務始終在後臺運行(它可以始終通過守護程序、監聽引導廣播等方式存在。),然後分別在服務的onStartCommand和onDestroy方法中註冊廣播和取消註冊。