A callback to detect changes in the window insets when the application is running.
Notes:
using UnityEngine; using UnityEngine.Android;
public class Controller : MonoBehaviour { private bool InsetsCallbackSupported => AndroidBuild.Version.apiLevel >= 30; private bool StatusBars; private bool NavigationBars;
public void Start() { if (InsetsCallbackSupported) AndroidApplication.onWindowInsetsChanged += OnInsetsChanged; else { var insets = AndroidApplication.currentWindowInsets; StatusBars = insets.IsVisible(AndroidWindowInsets.Type.StatusBars); NavigationBars = insets.IsVisible(AndroidWindowInsets.Type.NavigationBars); } }
public void Update() { if (!InsetsCallbackSupported) { var insets = AndroidApplication.currentWindowInsets; var currentStatusBars = insets.IsVisible(AndroidWindowInsets.Type.StatusBars); var currentNavigationBars = insets.IsVisible(AndroidWindowInsets.Type.NavigationBars); if (StatusBars != currentStatusBars || NavigationBars != currentNavigationBars) { OnInsetsChanged(insets); StatusBars = currentStatusBars; NavigationBars = currentNavigationBars; } } }
public void OnDisable() { if (InsetsCallbackSupported) AndroidApplication.onWindowInsetsChanged -= OnInsetsChanged; }
void OnInsetsChanged(AndroidWindowInsets insets) { Debug.Log($"NavigationBars visible " + insets.IsVisible(AndroidWindowInsets.Type.NavigationBars)); Debug.Log($"StatusBars visible " + insets.IsVisible(AndroidWindowInsets.Type.StatusBars)); } }