我们很多人应该都做过这样的操作,打开拨号键盘输入*#*#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,可能会跟其他应用的设置冲突,不过一般情况下应用应该不会使用这个功能,非系统级应用的控制还是放到应用内比较好。

更多相关文章

  1. Android 系统框架介绍
  2. 转: [Android]获取未安装的APK信息
  3. Android开机向导setupwizard,设置系统语言,WiFi向导
  4. Android 4 / iMX6系统开发手记
  5. Android 抢购功能(时间戳之间的倒计时)
  6. [置顶] 如何使Android应用程序获取系统权限来修改系统时间
  7. 去除Android系统应用的通知功能
  8. Android 根文件系统分析(2)

随机推荐

  1. eclipse导入android的app
  2. android QRCode
  3. Android 加密解密字符串
  4. 烽火学习笔记1
  5. 封装Android的AsyncHttpClient请求工具
  6. android 获取系统电量
  7. 【黑科技】钉钉自动打卡
  8. Android 获取控件高度宽度三种方法,防止0
  9. Android的webview加载本地html、本apk内h
  10. Android(安卓)Binder 分析——内存管理