默认User版本没有“开发者选项”,我们可以通过点击版本号7次来显示开发者模式,今天来看下代码中是如何处理的:

首先是

ackages/apps/Settings/src/com/android/settings/Settings.java的初始化处理:

布尔值showDev是否默认显示“开发者选项”:

 final boolean showDev = mDevelopmentPreferences.getBoolean(                DevelopmentSettings.PREF_SHOW,                android.os.Build.TYPE.equals("eng"));

如果想让开发者选项默认显示,不需要点击7次版本号,可直接将showDev置为true即可:
final boolean showDev = true; 

如果showDev为false,则在如下代码中隐藏“开发者选项”:

if (id == R.id.development_settings) {                if (!showDev) {                    target.remove(i);                }            } 


下面看一下点击 版本号 显示开发者选项的部分:

代码路径:packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java

首先是定义点击次数:

static final int TAPS_TO_BE_A_DEVELOPER = 7;


点击版本号的处理逻辑,若mDevHitCountdown小于0,则表示”开发者选项“已经显示,参考Resume函数的处理:

if (preference.getKey().equals(KEY_BUILD_NUMBER)) {            // Don't enable developer options for secondary users.            if (UserHandle.myUserId() != UserHandle.USER_OWNER) return true;            if (mDevHitCountdown > 0) {                if (mDevHitCountdown == 1) {                    if (super.ensurePinRestrictedPreference(preference)) {                        return true;                    }                }                mDevHitCountdown--;                if (mDevHitCountdown == 0) {                    getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,                            Context.MODE_PRIVATE).edit().putBoolean(                                    DevelopmentSettings.PREF_SHOW, true).apply();                    if (mDevHitToast != null) {                        mDevHitToast.cancel();                    }                    mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_on,                            Toast.LENGTH_LONG);                    mDevHitToast.show();                } else if (mDevHitCountdown > 0                        && mDevHitCountdown < (TAPS_TO_BE_A_DEVELOPER-2)) {                    if (mDevHitToast != null) {                        mDevHitToast.cancel();                    }                    mDevHitToast = Toast.makeText(getActivity(), getResources().getQuantityString(                            R.plurals.show_dev_countdown, mDevHitCountdown, mDevHitCountdown),                            Toast.LENGTH_SHORT);                    mDevHitToast.show();                }            } else if (mDevHitCountdown < 0) {                if (mDevHitToast != null) {                    mDevHitToast.cancel();                }                mDevHitToast = Toast.makeText(getActivity(), R.string.show_dev_already,                        Toast.LENGTH_LONG);                 mDevHitToast.show();            }        } 

Resume 函数

@Override    public void onResume() {        super.onResume();        PreferenceGroup parentPreference = getPreferenceScreen();        mDevHitCountdown = getActivity().getSharedPreferences(DevelopmentSettings.PREF_FILE,                Context.MODE_PRIVATE).getBoolean(DevelopmentSettings.PREF_SHOW,                        android.os.Build.TYPE.equals("eng")) ? -1 : TAPS_TO_BE_A_DEVELOPER;        mDevHitToast = null;    }



更多相关文章

  1. android UI设计的一些心得与问题解决(无效果图)
  2. Android(安卓)启动界面 点击按钮跳转和3秒跳转
  3. Android中控件的onClickListener,点击监听器
  4. 笔记33--ListView和ScrollView点击事件的冲突
  5. android 监听软键盘弹起和关闭状态与点击空白区域软键盘隐藏
  6. Activity禁用全局点击事件
  7. android notification 使用
  8. Windows搭建Eclipse+JDK+SDK的Android(安卓)--安卓开发入门级
  9. GIT开源安卓项目Top100

随机推荐

  1. 技术解析:如何获取全球疫情历史数据并处理
  2. 技术解析:如何用pyecharts绘制时间轮播图
  3. 武大樱花又盛开,用python画一棵樱花树
  4. python数据分析万字干货!一个数据集全方位
  5. 【决战西二旗】|Redis面试热点之底层实现
  6. 【Python】一文说清楚类与函数的选择
  7. 更高级的数据可视化,使用pyecharts制作精
  8. 小鹿专属福利 | 周末解答 + 给读者送书
  9. 动画:面试官问我如何在 20 万 IP 地址中快
  10. 如何正确对待伸手党和杠精