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