我們很多人應該都做過這樣的操作,打開撥号鍵盤輸入 *#*#4636#*#* 等字元就會彈出一個界面顯示手機相關的一些資訊,這個功能在 Android 中被稱為 Android Secret Code,除了這些系統預置的 Secret Code,我們也可以實作自己的 Secret Code,而且實作起來非常簡單。
要實作自己的 Secret Code,隻需要向系統注冊一個 Broadcast Receiver,不需要任何權限,如下所示:
<receiver android:name=".SecretReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SECRET_CODE"/>
<data android:scheme="android_secret_code" android:host="0123"/>
</intent-filter>
</receiver>
隻需要注冊 action 為 android.provider.Telephony.SECRET_CODE,并且 scheme 為android_secret_code 的 Broadcast Receiver,這樣當使用者在撥号鍵盤輸入 *#*#0123#*#* 時就會調用我們注冊的 Receiver 了,在 Receiver 中把接收到的 Intent 資訊打出來會是這樣:
- Intent { act=android.provider.Telephony.SECRET_CODE dat=android_secret_code://0123 flg=0x10 cmp=me.angeldevil.secretcode/.SecretReceiver }
這個邏輯的處理在撥号應用裡,如果使用第三方撥号應用而這個應用又沒有處理的話,也許會失效。
那麼這個功能有什麼做用呢?這個就看應用需要了,由于這個 Broadcast Receiver 運作在你自己的應用程序内,是以可以讀取你應用内的一切資料。比如說你可以在接收到 Broadcast 後 dump 應用狀态,可以打開一個 Activity 做一些特殊設定,可以啟用/禁用一些功能(比如 Flyme 就可以在輸入 *#*#6961#*#* 後在設定中顯示一些輔助功能,可以開啟 Root 等)。但是,不同的 Receiver 可以注冊相同的 android:host,可能會跟其他應用的設定沖突,不過一般情況下應用應該不會使用這個功能,非系統級應用的控制還是放到應用内比較好。
專注移動網際網路産品設計研發 分享最新的移動網際網路産品和技術