배터리

Browse sample. 샘플 찾아보기

이 문서에서는 .NET 다중 플랫폼 앱 UI(.NET MAUI) IBattery 인터페이스를 사용하여 디바이스의 배터리 정보를 검사 변경 내용을 모니터링하는 방법을 설명합니다. 또한 이 인터페이스는 디바이스가 저전력 모드에서 실행 중인지 여부를 나타내는 디바이스의 에너지 절약 장치 상태 대한 정보를 제공합니다.

인터페이스의 IBattery 기본 구현은 속성을 통해 Battery.Default 사용할 수 있습니다. IBattery 인터페이스와 Battery 클래스는 모두 네임스페이스에 Microsoft.Maui.Devices 포함됩니다.

시작하기

배터리 기능에 액세스하려면 다음 플랫폼별 설정이 필요합니다.

BatteryStats 권한이 필요하며 Android 프로젝트에서 구성해야 합니다. 다음과 같은 방법으로 권한을 구성할 수 있습니다.

  • 어셈블리 기반 권한을 추가합니다.

    Platforms/Android/MainApplication.cs 파일을 열고 지시문 다음에 using 다음 어셈블리 특성을 추가합니다.

    [assembly: UsesPermission(Android.Manifest.Permission.BatteryStats)]
    

    - 또는 -

  • Android 매니페스트를 업데이트합니다.

    Platforms/Android/AndroidManifest.xml 파일을 열고 노드에 manifest 다음 줄을 추가합니다.

    <uses-permission android:name="android.permission.BATTERY_STATS" />
    

    - 또는 -

  • 매니페스트 편집기에서 Android 매니페스트를 업데이트합니다.

    Visual Studio에서 Platforms/Android/AndroidManifest.xml 파일을 두 번 클릭하여 Android 매니페스트 편집기를 엽니다. 그런 다음 필수 사용 권한에서 BATTERY_STATS 권한을 검사. 그러면 AndroidManifest.xml 파일이 자동으로 업데이트됩니다.

배터리 상태 확인

인터페이스의 기본 구현 IBattery 인 속성에 액세스하여 Battery.Default 배터리 상태 검사 수 있습니다. 이 인터페이스는 남은 배터리 양을 읽는 것과 같이 ChargeLevel 배터리 상태에 대한 정보를 제공하는 다양한 속성을 정의합니다. 이 속성은 ChargeLevel 0.0에서 1.0 사이의 값을 반환하며, 이는 배터리의 충전 수준이 각각 비어 있는 것에서 전체로 표시함을 나타냅니다.

BatteryInfoChanged 이벤트는 사용 가능하며 배터리 상태가 변경될 때 발생합니다. 다음 예제에서는 모니터 이벤트를 사용 하 고 컨트롤에 BatteryInfoChanged 배터리 상태 보고 하는 Label 방법을 보여 줍니다.

private void BatterySwitch_Toggled(object sender, ToggledEventArgs e) =>
    WatchBattery();

private bool _isBatteryWatched;

private void WatchBattery()
{
    
    if (!_isBatteryWatched)
    {
        Battery.Default.BatteryInfoChanged += Battery_BatteryInfoChanged;
    }
    else
    {
        Battery.Default.BatteryInfoChanged -= Battery_BatteryInfoChanged;
    }

    _isBatteryWatched = !_isBatteryWatched;
}

private void Battery_BatteryInfoChanged(object sender, BatteryInfoChangedEventArgs e)
{
    BatteryStateLabel.Text = e.State switch
    {
        BatteryState.Charging => "Battery is currently charging",
        BatteryState.Discharging => "Charger is not connected and the battery is discharging",
        BatteryState.Full => "Battery is full",
        BatteryState.NotCharging => "The battery isn't charging.",
        BatteryState.NotPresent => "Battery is not available.",
        BatteryState.Unknown => "Battery is unknown",
        _ => "Battery is unknown"
    };
    
    BatteryLevelLabel.Text = $"Battery is {e.ChargeLevel * 100}% charged.";
}

저전력 에너지 절약 모드

배터리로 실행되는 디바이스를 절전 모드로 전환할 수 있습니다. 배터리 용량이 20% 미만으로 떨어지는 경우처럼 디바이스가 이 모드로 자동으로 전환되는 경우가 있습니다. 운영 체제는 배터리를 고갈시키는 경향이 있는 활동을 줄여 절전 모드에 응답합니다. 애플리케이션은 절전 모드가 켜져 있을 때 후순위 처리나 다른 고전력 활동을 피하여 도울 수 있습니다.

Important

디바이스의 절전 상태가 켜짐이면 애플리케이션에서 후순위 처리를 피해야 합니다.

디바이스의 에너지 절약 상태 속성(즉, OnOff또는 Unknown)에 액세스하여 EnergySaverStatus 읽을 수 있습니다. 상태 경우 애플리케이션은 On백그라운드 처리 또는 많은 전력을 소비할 수 있는 다른 활동을 피해야 합니다.

배터리가 에너지 절약 모드로 들어가거나 나가면 배터리가 이벤트를 발생 EnergySaverStatusChanged 합니다. 속성을 사용하여 EnergySaverStatus 디바이스의 현재 에너지 절약 상태 가져올 수도 있습니다.

다음 코드 예제에서는 에너지 절약 상태 모니터링하고 그에 따라 속성을 설정합니다.

private bool _isBatteryLow = false;

private void BatterySaverSwitch_Toggled(object sender, ToggledEventArgs e)
{
    // Capture the initial state of the battery
    _isBatteryLow = Battery.Default.EnergySaverStatus == EnergySaverStatus.On;
    BatterySaverLabel.Text = _isBatteryLow.ToString();

    // Watch for any changes to the battery saver mode
    Battery.Default.EnergySaverStatusChanged += Battery_EnergySaverStatusChanged;
}

private void Battery_EnergySaverStatusChanged(object sender, EnergySaverStatusChangedEventArgs e)
{
    // Update the variable based on the state
    _isBatteryLow = Battery.Default.EnergySaverStatus == EnergySaverStatus.On;
    BatterySaverLabel.Text = _isBatteryLow.ToString();
}

전원

이 속성은 PowerSource 디바이스의 요금이 청구되는 방식을 나타내는 열거형을 반환 BatteryPowerSource 합니다(있는 경우). 요금이 청구되지 않으면 상태 BatteryPowerSource.Battery. , BatteryPowerSource.UsbBatteryPowerSource.Wireless 값은 BatteryPowerSource.AC배터리가 충전되고 있음을 나타냅니다.

다음 코드 예제에서는 전원을 기반으로 컨트롤의 Label 텍스트를 설정합니다.

private void SetChargeModeLabel()
{
    BatteryPowerSourceLabel.Text = Battery.Default.PowerSource switch
    {
        BatteryPowerSource.Wireless => "Wireless charging",
        BatteryPowerSource.Usb => "USB cable charging",
        BatteryPowerSource.AC => "Device is plugged in to a power source",
        BatteryPowerSource.Battery => "Device isn't charging",
        _ => "Unknown"
    };
}

플랫폼 간 차이점

이 섹션에서는 배터리와 플랫폼별 차이점에 대해 설명합니다.

플랫폼의 차이점이 없습니다.