1. 程式人生 > >Unity簡單實現電量、充電狀態顯示

Unity簡單實現電量、充電狀態顯示

簡介:

很多遊戲內都有顯示當前網路、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
    }

最後釋出到手機上看看效果吧。