咱们不少人应该都作过这样的操做,打开拨号键盘输入*#*#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