据说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
android的SAFE MODE(安全模式)
最新推荐文章于 2023-03-22 17:53:17 发布