咱們不少人應該都作過這樣的操做,打開撥號鍵盤輸入*#*#4636#*#*等字符就會彈出一個界面顯示手機相關的一些信息,這個功能在Android中被稱爲android secret code,除了這些系統預置的secret code,咱們也能夠實現本身的secret code,並且實現起來很是簡單。android
要實現本身的secret code,只須要向系統註冊一個Broadcast Receiver,不須要任何權限,以下所示:ide
<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信息打出來會是這樣:code
Intent { act=android.provider.Telephony.SECRET_CODE dat=android_secret_code://0123 flg=0x10 cmp=me.angeldevil.secretcode/.SecretReceiver }xml
這個邏輯的處理在撥號應用裏,若是使用第三方撥號應用而這個應用又沒有處理的話,也許會失效。進程
那麼這個功能有什麼作用呢?這個就看應用須要了,因爲這個Broadcast Receiver運行在你本身的應用進程內,因此能夠讀取你應用內的一切數據。好比說你能夠在接收到Broadcast後dump應用狀態,能夠打開一個Activity作一些特殊設置,能夠啓用/禁用一些功能(好比Flyme就能夠在輸入*#*#6961#*#*後在設置中顯示一些輔助功能,能夠開啓Root等)。it
可是,不一樣的Receiver能夠註冊相同的android:host,可能會跟其餘應用的設置衝突,不過通常狀況下應用應該不會使用這個功能,非系統級應用的控制仍是放到應用內比較好。io