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

涉及目录:

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值