android的SAFE MODE(安全模式)

 据说android系统,按住MENU键开机,会安全模式进入系统。安全模式为何,暂未研究,现在看到了代码,先做下记号。

 

2.1代码位置:

frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java


收索SAFE MODE 这个tag会看到相关代码。

 

现分析如下:

步骤:在开机动画时,按住MENU键(或者字母S键,方向键的中间键,鼠标左键中的一个)直到开机,会进入安全模式。

得到log如下:

I/WindowManager(  101): SAFE MODE ENABLED (menu=1 s=-1 dpad=-1 trackball=-1)

现象:在机器左小脚显示“安全模式”。

 

 

源码

Android5.1:

frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java


public boolean detectSafeMode() {
    if (!mInputMonitor.waitForInputDevicesReady(
            INPUT_DEVICES_READY_FOR_SAFE_MODE_DETECTION_TIMEOUT_MILLIS)) {
        Slog.w(TAG, "Devices still not ready after waiting "
               + INPUT_DEVICES_READY_FOR_SAFE_MODE_DETECTION_TIMEOUT_MILLIS
               + " milliseconds before attempting to detect safe mode.");
    }

    int menuState = mInputManager.getKeyCodeState(-1, InputDevice.SOURCE_ANY,
            KeyEvent.KEYCODE_MENU);
    int sState = mInputManager.getKeyCodeState(-1, InputDevice.SOURCE_ANY, KeyEvent.KEYCODE_S);
    int dpadState = mInputManager.getKeyCodeState(-1, InputDevice.SOURCE_DPAD,
            KeyEvent.KEYCODE_DPAD_CENTER);
    int trackballState = mInputManager.getScanCodeState(-1, InputDevice.SOURCE_TRACKBALL,
            InputManagerService.BTN_MOUSE);
    int volumeDownState = mInputManager.getKeyCodeState(-1, InputDevice.SOURCE_ANY,
            KeyEvent.KEYCODE_VOLUME_DOWN);
    mSafeMode = menuState > 0 || sState > 0 || dpadState > 0 || trackballState > 0
            || volumeDownState > 0;
    try {
        if (SystemProperties.getInt(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, 0) != 0) {
            mSafeMode = true;
            SystemProperties.set(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, "");
        }
    } catch (IllegalArgumentException e) {
    }
    if (mSafeMode) {
        Log.i(TAG, "SAFE MODE ENABLED (menu=" + menuState + " s=" + sState
                + " dpad=" + dpadState + " trackball=" + trackballState + ")");
    } else {
        Log.i(TAG, "SAFE MODE not enabled");
    }
    mPolicy.setSafeMode(mSafeMode);
    return mSafeMode;
}

 

要把safe mode禁止掉,把mSafeMode赋值为false即可。

 

按键值参考:

参考:

http://developer.android.com/reference/android/view/KeyEvent.html

 


 

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值