모바일 앱에서 디바이스의 배터리 잔량 표시하기


PC나 콘솔 같은 디바이스에서 동작하는 앱이라면 상관없는 문제이지만 모바일 같은 휴대기기에서 동작하는 앱이라면 현재 앱이 동작하고 있는 디바이스의 배터리 잔량에 대해서 알아야 하거나 확인해야 할 수도 있다. 사용자가 일일이 화면 상단을 드래그나 터치해서 상태바(Status bar)를 꺼내지 않고도 배터리 잔량을 할 수 있게 하는 방식으로 말이다.


유니티는 모바일을 타깃으로 하는 게임이나 앱들을 굉장히 폭넓게 지원하기 때문에 이와 관련된 기능 역시 제공하고 있다.


SystemInfo.batteryLevel;

SystemInfo.batteryStatus;


유니티에서 배터리의 상태와 관련된 정보는 SystemInfo 클래스의 정적 프로퍼티를 통해서 가져올 수 있다.


첫 번째로 batteryLevel은 현재 디바이스의 배터리 충전량으로 float 변수이며, 0-1사이의 값을 가지며, 이 프로퍼티를 호출한 디바이스가 배터리를 사용하지 않거나 batteryLevel을 지원하지 않는 디바이스라면 -1을 반환한다.


두 번째 프로퍼티는 batteryStatus로 현재 배터리의 상태를 가져올 수 있다. 이 프로퍼티는 BatteryStatus 타입의 열거형이며 열거형의 종류와 내용은 다음과 같다.


BatteryStatus.Unknown;       // 충전 상태를 알 수 없음. 배터리 상태를 지원하지 않는 플랫폼일 때 반환되는 값.
BatteryStatus.Discharging;   // 충전 케이블이 연결되지 않았고, 충전도 되지 않는 상태.
BatteryStatus.NotCharging;   // 충전 케이블은 연결되어 있지만, 충전은 되지 않는 상태.
BatteryStatus.Charging;      // 충전 케이블이 연결되어 있고, 충전되고 있는 상태.
BatteryStatus.Full;          // 충전 케이블이 연결되어 있고, 배터리가 가득 찬 상태.






간단한 사용 예시


using UnityEngine;
using UnityEngine.UI;

public class BatteryUI : MonoBehaviour
{
    Sprite chargeStateSprite;   // 배터리 충전중 표시 스프라이트
    Sprite fewStateSprite;      // 배터리가 부족하다는 표시 스프라이트

    Image batteryStateImg;      // 배터리 상태 표시 이미지
    Image batteryFrameImg;      // 배터리 모양 프레임 이미지
    Image batteryLevelImg;      // 배터리 잔량 표시 이미지

    public void UpdateBatteryUI()
    {
        float batteryLevel = SystemInfo.batteryLevel;
        switch (SystemInfo.batteryStatus)
        {
            case BatteryStatus.Full:
            case BatteryStatus.Charging:

                batteryLevelImg.color = batteryFrameImg.color = Color.white;
                batteryStateImg.sprite = chargeStateSprite;
                batteryStateImg.gameObject.SetActive(true);
                batteryLevelImg.fillAmount = 1f;
                break;

            case BatteryStatus.Discharging:
                if(batteryLevel < 0.1f) // 배터리가 부족하면 이미지를 빨갛게
                {
                    batteryLevelImg.color = batteryFrameImg.color = Color.red;
                    batteryStateImg.sprite = fewStateSprite;
                    batteryStateImg.gameObject.SetActive(true);
                }
                else
                {
                    batteryLevelImg.color = batteryFrameImg.color = Color.white;
                    batteryStateImg.gameObject.SetActive(false);
                }

                batteryLevelImg.fillAmount = batteryLevel;
                break;
        }
    }
}



반응형

+ Recent posts