涉及目录:

/SettingsMainActivity/src/com/android/settings/SettingsActivity.java

/SettingsMainActivity/src/com/android/settings/DeviceInfoSettings.java

玩过Android的朋友都知道,在设置中的版本信息中,点击7下版本号,就会把开发者模式打开。这个主要涉及的类是DeviceInfoSettings.java,具体情况我们看源码。

1、DeviceInfoSettings.java

在类中有如下声明,对就是7次。

static final int TAPS_TO_BE_A_DEVELOPER = 7;

然后判断是否是已经开启过“开发者模式”功能,是否需要再点击7次。

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;

下面是点击版本号事件处理的功能

else if (preference.getKey().equals(KEY_BUILD_NUMBER)) {

// Don't enable developer options for secondary users.

if (UserHandle.myUserId() != UserHandle.USER_OWNER) return true; //不是主人模式

// Don't enable developer options until device has been provisioned 是否允许开启开发者模式

if (Settings.Global.getInt(getActivity().getContentResolver(),

Settings.Global.DEVICE_PROVISIONED, 0) == 0) {

return true;

}

final UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);

if (um.hasUserRestriction(UserManager.DISALLOW_DEBUGGING_FEATURES)) return true;//不允许debug模式

if (mDevHitCountdown > 0) {

mDevHitCountdown--;

if (mDevHitCountdown == 0) {

//如果等于0时,显示开发者模式,修改配置文件,然后在SettingsActivity.java中获取是否需要显示

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();

// This is good time to index the Developer Options

Index.getInstance(

getActivity().getApplicationContext()).updateFromClassNameResource(

DevelopmentSettings.class.getName(), true, true);

} 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();

}

}

2、SettingsActivity.java

在updateTilesList中刷新界面

private void updateTilesList(List target) {

//是否显示开发者模式

final boolean showDev = mDevelopmentPreferences.getBoolean(

DevelopmentSettings.PREF_SHOW,

android.os.Build.TYPE.equals("eng"));

.......

}

然后继续在这个方法中

else if (id == R.id.development_settings) {

if (!showDev || um.hasUserRestriction(

UserManager.DISALLOW_DEBUGGING_FEATURES)) {

removeTile = true; //如果这里为true,表示remove

}

}

3、显示和影藏

有些客户要求设备需要如果用户退出“开发模式”后需要自动影藏,然后再次点击7次才能再次打开

嗯嗯 虽然有点怪,但只要了解上面哪些,修改起来还是很简单的。

1、DeviceInfoSettings.java修改

只要每次进入版本信息,也就上面中的代码,如下:

//修改前

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;

//修改后

mDevHitCountdown = TAPS_TO_BE_A_DEVELOPER; //每次进入都初始化为7

这样如果用户需要打开“开发者模式”,每次都需要点击7次

2、SettingsActivity.java修改

我们只需要再onDestory()方法中新增,每次退出后就恢复默认值“false”

getSharedPreferences(DevelopmentSettings.PREF_FILE,

Context.MODE_PRIVATE).edit().putBoolean(

DevelopmentSettings.PREF_SHOW, false).apply();

修改了上面两处就可达到有些客户的需求了。

android开发者模式 device,Settings中开发者模式的影藏和显示相关推荐

  1. Android 12.0 系统Settings去掉开发者模式功能

    1.概述 在12.0的系统rom产品定制化开发中,在系统Settings中的关于手机的选项中,系统默认点击版本号5次会自动打开开发者模式,但是在某些产品开发过程中,禁止打开开发者模式,需要去掉开发者模 ...

  2. Android 11.0 系统Settings去掉开发者模式功能

    目录 1.概述 2.系统Settings去掉开发者模式功能的核心类 3.系统Settings去掉开发者模式功能的核心功能实现和分析

  3. android mvp模式例子_Android中mvp模式使用实例详解

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...

  4. 8086的两种工作模式_8086系统中最小模式与最大模式两种工作方式的主要区别是什么?...

    展开全部 最小模式和最大模式的主要区别为以下几方面: 1.处理系统方面 最小模式:系统里e68a843231313335323631343130323136353331333366306533就808 ...

  5. php工厂模式及laravel中工厂模式

    工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类 应用场景:连接数据库,可以使用mysql .mysqli.pdo,根据不同参数配置使用不同的数据库操作类 做支付接口的时候,未来可能对应 ...

  6. IntelliJ IDEA/Android Studio 翻译插件,可中英互译。

    TranslationPlugin 项目地址:YiiGuxing/TranslationPlugin 简介:IntelliJ IDEA/Android Studio 翻译插件,可中英互译.    In ...

  7. android应用窗口模式,[技巧]如何启用Android N开发者预览版中的“自由窗口”模式...

    这里是Android N开发者预览版"自有窗口"模式的一些实际演示截图. 对于已经参加了"Beta Program"的人们来说,通过OTA获取Android N ...

  8. 【Android取证篇】Android设备USB调试打开方式(开发者模式)

    [Android取证篇]Android设备USB调试打开方式(开发者模式) Android各个版本系统手机开启"USB调试"的入口不全相同,仅供参考-[蘇小沐] 1.[Androi ...

  9. Android中画中画模式的使用

    当我们的APP进行视频播放时,往往希望用户在进行其他操作的时候还可以不影响他看视频,这时候就需要我们的画中画模式了. 1.画中画模式的启动方式 <1>首先我们要在AndroidManife ...

  10. Chromebook开发者模式Linux,Chromebook 的开发者模式和开发者版本有什么区别?

    如果你刚开始使用 Chromebook,会发现有开发者模式和 Chrome OS 的开发者版本两个不同的说法.你一定会好奇它们是不是一个意思,实际上,并不是. 什么是开发者模式(Developer M ...

最新文章

  1. 网络工程师_想要记录下来的一些题_2
  2. (转)Apache Commons工具集简介
  3. python urllib.request 爬虫 数据处理-Python爬虫学习之(二)| urllib进阶篇
  4. 远程桌面连接后远程计算机注销,使用windows8.1 pro的远程桌面,当断开远程桌面时被控制端用户注销问题...
  5. phpdocumentor生成代码注释文档(linux)
  6. 回文数、括号匹配(栈操作)
  7. codeforces 705A-C语言解题报告
  8. linux的重要文件,Linux中重要文件夹介绍
  9. 3.3、苏宁百万级商品爬取 代码讲解 商品爬取
  10. java中struts2框架,概述Java的struts2框架
  11. postfix 配置
  12. 华为NP课程笔记7-BGP1
  13. 2018华为软件精英挑战赛个人总结
  14. 卫星通信常用专业词汇
  15. Comware 架构理解
  16. SHU OJ 420 购买装备(假装背包,其实贪心)
  17. Unity3D 通过脚本设置PlayerSettings的属性(GPU Skinning,Auto Graphics APi[OpenGLES2])等
  18. 全面演示springboot发送QQ邮件过程(复杂邮件+简单邮件)图片、附件
  19. 【检测与估计理论(Detection and Estimation Theory)】一、估计简介(Introduction of Estimation)
  20. 腾讯优图NCNN详细分析及实践操作(含Yolov5实践)

热门文章

  1. 为什么局域网需要https加密?如何选择内网SSL证书?
  2. 机器学习笔试面试整理
  3. python单例模式继承_python单例模式
  4. 强者的成功法则:受益一生的书单
  5. 游戏软件性能测试报告,游戏性能测试及总结
  6. 数据库--分库分表中间件--选型/对比/框架
  7. 产品经理/总监 面试题及答案
  8. Microsoft VS Code安装教程
  9. HX710_24位电子秤AD采集
  10. 《勘测定界界址点坐标交换格式》解析