How to get current battery life on mobile device

Hello. I have Unity4 pro ios pro. Is there a way to get the device’s system properties including current battery life?

public static float GetBatteryLevel()
{
#if UNITY_IOS
UIDevice device = UIDevice.CurrentDevice();
device.batteryMonitoringEnabled = true; // need to enable this first
Debug.Log("Battery state: " + device.batteryState);
Debug.Log("Battery level: " + device.batteryLevel);
return device.batteryLevel*100;
#elif UNITY_ANDROID

        if (Application.platform == RuntimePlatform.Android)
        {
            try
            {
                using (AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
                {
                    if (null != unityPlayer)
                    {
                        using (AndroidJavaObject currActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
                        {
                            if (null != currActivity)
                            {
                                using (AndroidJavaObject intentFilter = new AndroidJavaObject("android.content.IntentFilter", new object[]{ "android.intent.action.BATTERY_CHANGED" }))
                                {
                                    using (AndroidJavaObject batteryIntent = currActivity.Call<AndroidJavaObject>("registerReceiver", new object[]{null,intentFilter}))
                                    {
                                        int level = batteryIntent.Call<int>("getIntExtra", new object[]{"level",-1});
                                        int scale = batteryIntent.Call<int>("getIntExtra", new object[]{"scale",-1});

                                        // Error checking that probably isn't needed but I added just in case.
                                        if (level == -1 || scale == -1)
                                        {
                                            return 50f;
                                        }
                                        return ((float)level / (float)scale) * 100.0f; 
                                    }
                                
                                }
                            }
                        }
                    }
                }
            } catch (System.Exception ex)
            {
              
            }
        }
       
        return 100;
        #endif
    }

No without a plugin, check out our answer here: http://answers.unity3d.com/questions/600278/how-to-read-battery-level-on-ios.html

Excerpt:

UIDevice device = UIDevice.CurrentDevice();
device.batteryMonitoringEnabled = true; // need to enable this first

Debug.Log("Battery state: " + device.batteryState);
Debug.Log("Battery level: " + device.batteryLevel);

If you want to be notified when the battery state or level changes, you can subscribe to device.BatteryStateDidChange and device.BatteryLevelDidChange events. Please see UIDevice API docs for more info.

Sorry to revive an old thread, (this is the first google result) but here’s an android solution[1] that doesn’t require a plugin;
I couldn’t work out how to get the above to work, and using JNI was a bit of a pain.

int GetBatteryLevel()
	{
		try {
			string CapacityString = System.IO.File.ReadAllText ("/sys/class/power_supply/battery/capacity");
			return int.Parse (CapacityString);
		} catch (Exception e) {
			Debug.Log ("Failed to read battery power; " + e.Message);
		}

		return -1;
	}

[1] Only tested on my Note4, and I believe the file location could change, and you can have multiple batteries etc

This is the function I used to get the complete status of the Battery:

public void UpdateBatteryStatus()
        {
            if(SystemInfo.batteryStatus == BatteryStatus.Charging)
            {
                //Do Something
            }
            else if(SystemInfo.batteryStatus == BatteryStatus.Full || SystemInfo.batteryLevel >= 0.9f)
            {
                //Do Something
            }
            else if (SystemInfo.batteryLevel >= 0.61f && SystemInfo.batteryLevel < 0.9f)
            {
                //Do Something
            }
            else if (SystemInfo.batteryLevel >= 0.51f && SystemInfo.batteryLevel < 0.61f)
            {
                //Do Something
            }
            else if (SystemInfo.batteryLevel >= 0.31f && SystemInfo.batteryLevel < 0.51f)
            {
                //Do Something
            }
            else if (SystemInfo.batteryLevel >= 0.11f && SystemInfo.batteryLevel < 0.31f)
            {
                //Do Something
            }
            else if (SystemInfo.batteryLevel < 0.11f)
            {
                //Do Something
            }
        }