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

Android  2018年11月17日 pm5:20发布6年前 (2018)更新 城堡大人
124 0 0


涉及目录:

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

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

 历史上的今天

  1. 2023: MARK MANSON:年近30的十条人生经验(0条评论)
  2. 2023: startActivity源码分析2(0条评论)
  3. 2019: 韩少功:偷书(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

Android 13 MediaProvider简单记录

前言Android 9时扫描逻辑还在MediaScanner中(这块之前有介绍过),而后续Android高版本开始变化,以Android 13来说,扫描逻辑已经放在MediaProvider中了,也就是ModernMediaScanner。Android 10,11和12项目少今天就简单...

郑愁予 : 错误

我打江南走过那等在季节里的容颜如莲花的开落东风不来,三月的柳絮不飞 你底心如小小的寂寞的城恰若青石的街道向晚跫音不响,三月的春帷不揭 你底心是小小的窗扉紧掩我达达的马蹄是美丽的错误我不是归人,是个过客…… 

史铁生:想念地坛

想念地坛,主要是想念它的安静。坐在那园子里,坐在不管它的哪一个角落,任何地方,喧嚣都在远处。近旁只有荒藤老树,只有栖居了鸟儿的废殿颓檐、长满了野草的残墙断壁,暮鸦吵闹着归来,雨燕盘桓吟唱,风过檐铃,雨落空林,蜂飞蝶舞草动虫鸣……四季的歌咏此起彼伏从不间断。地坛的安静并非无声。有一天大雾迷漫,世界...

冰心:一日的春光

去年冬末,我给一位远方的朋友写信,曾说:“我要尽量的吞咽今年北平的春天。”今年北平的春天来的特别的晚,而且在还不知春在哪里的时候,抬头忽见黄尘中绿叶成荫,柳絮乱飞,才晓得在厚厚的尘沙黄幕之后,春还未曾露面,已悄悄的远引了。天下事都是如此——去年冬天是特别的冷,也显得特别的长。每天夜里,灯下孤坐...

Eclipse历史版本下载

有时候不需要最新的Eclipse版本,因此需要下载老一点的在网上看到有Eclipse历史版本的链接说明,因此记录于此.不过,有部分链接失效了..下载路径 http://wiki.eclipse.org/Older_Versions_Of_Eclipse 

王小波:用一生来学习艺术

我念过文科,也念过理科。在课堂上听老师提到艺术这个词,还是理科的老师次数更多:化学老师说,做实验有实验艺术;计算机老师说,编程序有编程艺术。老师们说,怎么做对是科学,怎么做好则是艺术;前者有判断真伪的法则,后者则没有;艺术的真谛就是要叫人感到好,甚至是完美无缺;传授科学知识就是告诉你这些法则,而艺术...