Unity簡單實現電量、充電狀態顯示
阿新 • • 發佈:2019-02-01
簡介:
很多遊戲內都有顯示當前網路、Ping值、電量、充電狀態等需求,Unity給我們提供了豐富的API,可以簡單實現這些功能。
在使用Ping類和FPSManager實現了對網路狀態和fps狀態的顯示以後,簡單的使用SystemInfo類實現電量以及狀態顯示。
試過網上很多的使用的 System.IO.File.ReadAllText("/sys/class/power_supply/battery/capacity");方式,但是有些手機獲取不到電量資訊,例如榮耀9。。後來自己寫jar包,從Android取出電量資訊,可以實現,後來想起來以前做跨平臺時候用到了SystemInfo類,翻了下API才知道自己寫jar包有多無聊。。
下面簡單的實現電量和狀態的顯示
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; public class BatteryUtils : MonoBehaviour { private Coroutine _coroutine; private float _timeInterval = 1; private float _batteryLevel = 0; private float _prevBatteryLevel = 0; private BatteryStatus _batteryStatus; private BatteryStatus _prevBatteryStatus; public Action<float, BatteryStatus> OnBatteryUpdate; //電量資訊更新事件 void Start() { if (this._coroutine == null) this._coroutine = this.StartCoroutine(BatteryMonitor()); } private IEnumerator BatteryMonitor() { while (true) { this._batteryLevel = SystemInfo.batteryLevel; this._batteryStatus = SystemInfo.batteryStatus; //電量資訊或者電量狀態改變,相應事件 if (this._prevBatteryLevel != this._batteryLevel || this._prevBatteryStatus != this._batteryStatus) { if (this.OnBatteryUpdate != null) this.OnBatteryUpdate.Invoke(this._batteryLevel, this._batteryStatus); this._prevBatteryLevel = this._batteryLevel; this._prevBatteryStatus = this._batteryStatus; } yield return new WaitForSeconds(this._timeInterval); } } private void OnDestroy() { if (this._coroutine != null) { StopCoroutine(this._coroutine); this._coroutine = null; } } }
在電量資訊或者電量狀態改變時候,會相應相應事件,我們可以顯示電量不同顏色,充電的時候顯示小閃電,程式碼直接拿去用就行。
需要注意
得到的batteryLevel是0~1的數值,0位空,1為滿格
BatteryStatus的幾種狀態,字面意思很明顯了。。
public enum BatteryStatus
{
Unknown = 0,
Charging = 1,
Discharging = 2,
NotCharging = 3,
Full = 4
}
最後釋出到手機上看看效果吧。