导航栏模式对应的 Overlay 包名

  • 三按钮模式:

    • 包名: com.android.internal.systemui.navbar.threebutton
  • 两按钮模式:

    • 包名: com.android.internal.systemui.navbar.twobutton
  • 手势导航模式:

    • 包名: com.android.internal.systemui.navbar.gestural
  • 传统导航模式:

    • 包名: com.android.internal.systemui.navbar.no_navbar

切换导航栏模式

启用特定的导航栏模式

使用以下命令通过 ADB 切换到所需的导航栏模式:

  • 切换到手势导航模式:

    1
    2
    3
    4
    5
      adb shell cmd overlay enable com.android.internal.systemui.navbar.gestural

    - **切换到两按钮导航模式**:
    ```bash
    adb shell cmd overlay enable com.android.internal.systemui.navbar.twobutton
  • 切换到三按钮导航模式:

    1
    adb shell cmd overlay enable com.android.internal.systemui.navbar.threebutton
  • 切换到传统导航模式:

    1
    adb shell cmd overlay enable com.android.internal.systemui.navbar.no_navbar

禁用其他导航栏模式的 Overlay

确保启用了唯一的导航栏模式时,需要禁用其他的模式:

1
2
3
adb shell cmd overlay disable com.android.internal.systemui.navbar.twobutton
adb shell cmd overlay disable com.android.internal.systemui.navbar.threebutton
adb shell cmd overlay disable com.android.internal.systemui.navbar.no_navbar

发送广播通知系统

切换模式后,需要发送以下广播通知系统:

1
adb shell am broadcast -a com.ifpdos.action.navigation_change

查询当前导航栏模式

要获取当前启用的导航栏模式,可以通过以下命令列出当前启用的 Overlay 包:

1
adb shell cmd overlay list | grep '\[x\]'

然后,检查以下 Overlay 包名是否已启用,以确定当前的导航栏模式:

  • com.android.internal.systemui.navbar.gestural: 手势导航模式
  • com.android.internal.systemui.navbar.twobutton: 两按钮导航模式
  • com.android.internal.systemui.navbar.threebutton: 三按钮导航模式
  • com.android.internal.systemui.navbar.no_navbar: 传统导航模式

判断导航栏模式代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
fun getCurrentNavigationBarMode(context: Context): NavigationBarMode {  
return when {
isOverlayPkgEnable(context, NAV_BAR_MODE_3BUTTON_OVERLAY) -> NavigationBarMode.NAVIGATION_BAR_MODE_3KEY
isOverlayPkgEnable(context, NAV_BAR_MODE_2BUTTON_OVERLAY) -> NavigationBarMode.NAVIGATION_BAR_MODE_2KEY
isOverlayPkgEnable(context, NAV_BAR_MODE_GESTURAL_OVERLAY) -> NavigationBarMode.NAVIGATION_BAR_MODE_GESTURE
isOverlayPkgEnable(context, SYSTEM_TRADITIONAL_NAVIGATION_PKG) -> NavigationBarMode.NAVIGATION_BAR_NO_NAVIGATION_BAR
else -> NavigationBarMode.NAVIGATION_BAR_MODE_3KEY
}
}

enum class NavigationBarMode {
NAVIGATION_BAR_NO_NAVIGATION_BAR,
NAVIGATION_BAR_MODE_2KEY,
NAVIGATION_BAR_MODE_3KEY,
NAVIGATION_BAR_MODE_GESTURE
}