Xamarin.Essentials:배터리
Battery 클래스를 사용하면 디바이스의 배터리 정보를 확인하고 변경 사항을 모니터링할 수 있으며, 디바이스가 절전 모드로 실행 중인지를 나타내는 디바이스 절전 상태 관련 정보를 확인할 수 있습니다. 디바이스의 절전 상태가 켜짐이면 애플리케이션에서 후순위 처리를 피해야 합니다.
시작하기
이 API를 사용하기 전에 라이브러리가 제대로 설치되고 프로젝트에 설정되어 있는지 확인하기 위해 Xamarin.Essentials에 대한 시작 가이드를 읽어보세요.
배터리 기능에 액세스하려면 다음 플랫폼 관련 설정이 필요합니다.
Battery
권한이 필요하며 Android 프로젝트에서 구성해야 합니다. 이 권한은 다음과 같은 방법으로 추가할 수 있습니다.
속성 폴더 아래의 AssemblyInfo.cs 파일을 열고 다음을 추가합니다.
[assembly: UsesPermission(Android.Manifest.Permission.BatteryStats)]
또는 Android 매니페스트를 업데이트합니다.
속성 폴더 아래의 AndroidManifest.xml 파일을 열고 매니페스트 노드 내부에 다음을 추가합니다.
<uses-permission android:name="android.permission.BATTERY_STATS" />
또는 Android 프로젝트를 마우스 오른쪽 단추로 클릭하고 프로젝트의 속성을 엽니다. Android 매니페스트 아래에서 필요한 권한: 영역을 찾아 Battery 권한을 확인합니다. 그러면 AndroidManifest.xml 파일이 자동으로 업데이트됩니다.
배터리 사용
클래스에서 Xamarin.Essentials에 대한 참조를 추가합니다.
using Xamarin.Essentials;
현재 배터리 정보를 확인합니다.
var level = Battery.ChargeLevel; // returns 0.0 to 1.0 or 1.0 when on AC or no battery.
var state = Battery.State;
switch (state)
{
case BatteryState.Charging:
// Currently charging
break;
case BatteryState.Full:
// Battery is full
break;
case BatteryState.Discharging:
case BatteryState.NotCharging:
// Currently discharging battery or not being charged
break;
case BatteryState.NotPresent:
// Battery doesn't exist in device (desktop computer)
break;
case BatteryState.Unknown:
// Unable to detect battery state
break;
}
var source = Battery.PowerSource;
switch (source)
{
case BatteryPowerSource.Battery:
// Being powered by the battery
break;
case BatteryPowerSource.AC:
// Being powered by A/C unit
break;
case BatteryPowerSource.Usb:
// Being powered by USB cable
break;
case BatteryPowerSource.Wireless:
// Powered via wireless charging
break;
case BatteryPowerSource.Unknown:
// Unable to detect power source
break;
}
배터리의 속성이 변경될 때마다 다음과 같이 이벤트가 트리거됩니다.
public class BatteryTest
{
public BatteryTest()
{
// Register for battery changes, be sure to unsubscribe when needed
Battery.BatteryInfoChanged += Battery_BatteryInfoChanged;
}
void Battery_BatteryInfoChanged(object sender, BatteryInfoChangedEventArgs e)
{
var level = e.ChargeLevel;
var state = e.State;
var source = e.PowerSource;
Console.WriteLine($"Reading: Level: {level}, State: {state}, Source: {source}");
}
}
배터리로 실행되는 디바이스를 절전 모드로 전환할 수 있습니다. 배터리 용량이 20% 미만으로 떨어지는 경우와 같이 디바이스가 자동으로 이 모드로 전환되는 경우도 있습니다. 운영 체제는 배터리를 고갈시키는 경향이 있는 활동을 줄여 절전 모드에 응답합니다. 애플리케이션은 절전 모드가 켜져 있을 때 후순위 처리나 다른 고전력 활동을 피하여 도울 수 있습니다.
또한 정적 Battery.EnergySaverStatus
속성을 사용하여 디바이스의 현재 절전 상태를 확인할 수도 있습니다.
// Get energy saver status
var status = Battery.EnergySaverStatus;
이 속성은 On
, Off
또는 Unknown
인 EnergySaverStatus
열거형의 멤버를 반환합니다. 속성이 On
을 반환하는 경우 애플리케이션에서 후순위 처리나 많은 전력을 소모할 수 있는 다른 활동을 피해야 합니다.
또한 애플리케이션에서 이벤트 처리기를 설치해야 합니다. Battery 클래스는 절전 상태가 변경될 때 트리거되는 이벤트를 표시합니다.
public class EnergySaverTest
{
public EnergySaverTest()
{
// Subscribe to changes of energy-saver status
Battery.EnergySaverStatusChanged += OnEnergySaverStatusChanged;
}
private void OnEnergySaverStatusChanged(EnergySaverStatusChangedEventArgs e)
{
// Process change
var status = e.EnergySaverStatus;
}
}
절전 상태가 On
으로 변경되면 애플리케이션에서 후순위 처리 수행을 중지해야 합니다. 상태가 Unknown
또는 Off
로 변경되면 애플리케이션에서 후순위 처리를 다시 시작할 수 있습니다.