How to check the remaining battery level of your controller

public static int GetControllerBatteryState()
    {
#if PLATFORM_ANDROID && !UNITY_EDITOR
      using var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
      var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
      if (activity == null)
      {
        Utils.LogError("Activity is null");
        return -1;
      }
      using var filter = new AndroidJavaObject("android.content.IntentFilter");
      if (filter == null)
      {
        Utils.LogError("IntentFilter is null");
        return -1;
      }
      filter.Call("addAction", "com.magicleap.controller.action.BATTERY_CHANGED");
      using var intent = activity.Call<AndroidJavaObject>("registerReceiver", null, filter);
      if (intent == null)
      {
        Utils.LogError("Intent is null");
        return -1;
      }
      using var batteryManager = new AndroidJavaClass("android.os.BatteryManager");
      if (batteryManager == null)
      {
        Utils.LogError("BatteryManager is null");
        return -1;
      }
      var EXTRA_PRESENT = batteryManager.GetStatic<string>("EXTRA_PRESENT");
      var EXTRA_LEVEL = batteryManager.GetStatic<string>("EXTRA_LEVEL");
      var isPresent = intent.Call<bool>("getBooleanExtra", EXTRA_PRESENT, false);
      return isPresent ? intent.Call<int>("getIntExtra", EXTRA_LEVEL, -1) : -1;
#else
    return -1;
#endif
    }
1 Like