LoginSignup
0
2

More than 3 years have passed since last update.

Android 10でジェスチャーナビゲーションの有効無効を判定する方法

Last updated at Posted at 2019-10-03

Android 10からジェスチャーナビゲーションが使えるようになっています。
ジェスチャーナビゲーションは従来の操作方法と大きく異なり、アプリ側で対応も必要になってきますが、その際、アプリからシステムナビゲーションの種別がどれになっているか知りたくなります。

その方法を調べたのでご紹介。

設定アプリでシステムナビゲーションの選択をしている処理を覗いてみます。
SystemNavigationPreferenceController.java
に、ほぼそのままズバリなメソッドがあります。

    static boolean isEdgeToEdgeEnabled(Context context) {
        return NAV_BAR_MODE_GESTURAL == context.getResources().getInteger(
                com.android.internal.R.integer.config_navBarInteractionMode);
    }

ただ、一般アプリからではcom.android.internal.R.integer.config_navBarInteractionModeを直接は参照できません。また、NAV_BAR_MODE_GESTURALも、ただのint値ですが WindowManagerPolicyConstants.java@hide なのでこちらも直接は参照できません。

あくまで直接は参照できないだけです。
一工夫して、以下のようなコードで判定できます。

private const val NAV_BAR_MODE_3BUTTON = 0
private const val NAV_BAR_MODE_2BUTTON = 1
private const val NAV_BAR_MODE_GESTURAL = 2
private val config_navBarInteractionMode: Int by lazy {
    Resources.getSystem()
        .getIdentifier("config_navBarInteractionMode", "integer", "android")
}

private fun getNavBarInteractionMode(context: Context): Int =
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        context.resources.getInteger(config_navBarInteractionMode)
    } else {
        NAV_BAR_MODE_3BUTTON
    }

fun is3ButtonNavigation(context: Context): Boolean =
    getNavBarInteractionMode(context) == NAV_BAR_MODE_3BUTTON

fun is2ButtonNavigation(context: Context): Boolean =
    getNavBarInteractionMode(context) == NAV_BAR_MODE_2BUTTON

fun isGestureNavigation(context: Context): Boolean =
    getNavBarInteractionMode(context) == NAV_BAR_MODE_GESTURAL

Android 10未満は3ボタンに倒しています。Android 9にあったSwipe up home buttonのことは忘れましょう。Android 10以上で判定していますが、今後ナビゲーションがどうなるかも不明なので10以降で有効な方法かも不明です。

以上です。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2