目录
涉及目录:
/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<DashboardCategory> 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();
修改了上面两处就可达到有些客户的需求了。
历史上的今天
暂无评论...
随机推荐
[摘]车载MediaSession框架理解
前言本文内容主要介绍Android车载多媒体开发MediaSession框架知识,而且内容是阅读参考文的笔记。记录于此,方便自己查阅。好记性不如烂笔头。正文这里摘抄我自己想了解的,而且只是记录一下,有兴趣的还是看原文,多谢理解。Android AutoAndroid Auto就是...
[代码片段]Android像素转换工具类
前言移动项目需要根据设备进行适配,这个还是很有用的,摘抄于此,方便自己查阅。正文public class DensityUtil { public static int dip2px(float dpValue) { return (int) (dpValue * R...
toUpperCase()和toLowerCase()字符串大小写
前言Java很强大,自带了字符串的大小写转换方法。有时候忘记了,摘抄于此,以便查阅。总结toLowerCase()和toUpperCase()只对英文字母有效,对除了A ~ Z和a ~ z的其余字符无任何效果。推荐使用toLowerCase(Locale locale)和toUpper...
去除阴影动画效果和影藏滚动条
前言在使用ScrollView,ListView,ViewPage,GridView,RecyclerView等一些带有滚动的布局,当拉到尽头(顶部、底部)时继续拉就会出现的阴影动画效果。如果数据超过屏幕,用手滑动时就会显示滚动条,有时候需要有时候不需要。我的系统环境Android 4.2....
裴多菲:我愿意是激流
我愿意是急流,山里的小河,在崎岖的路上、岩石上经过......只要我的爱人是一条小鱼,在我的浪花中快乐地游來游去我愿意是荒林,在河流的兩岸对一阵阵的狂风,勇敢地作战......只要我的爱人是一只小鸟在我的稠密的树枝间做窠、 鸣叫我愿意是废墟,在峻峭的山岩上這静默的毁灭并不使我懊丧....
JNI异常的使用
前言JNI中也存在异常,如果出现异常不处理就会让程序崩溃。因此JNI中定义了异常相关函数用于处理异常。下面就介绍一写常用的异常处理函数。正文Throw# env : JNI接口指针# obj : 一个java.lang.Throwable对象# 如果成功时返回0;失败时为负值jint...