分享方式:


電池

Browse sample. 流覽範例

本文說明如何使用 .NET 多平臺應用程式 UI (.NET MAUI) IBattery 介面來檢查裝置的電池資訊,並監視是否有變更。 此介面也會提供裝置節能狀態的相關信息,指出裝置是否以低功率模式執行。

介面的預設實作 IBattery 可透過 Battery.Default 屬性取得。 IBattery介面和Battery類別都包含在 命名空間中Microsoft.Maui.Devices

開始使用

若要存取 電池 功能,需要下列平臺特定設定。

需要 BatteryStats 權限,而且必須在 Android 專案中設定。 您可以透過下列方式設定權限:

  • 新增元件型權限:

    開啟 Platform/Android/MainApplication.cs 檔案,並在 指示詞之後using新增下列元件屬性:

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

    - 或 -

  • 更新 Android 指令清單:

    開啟 [平臺/Android/AndroidManifest.xml] 檔案,manifest然後在 節點中新增下列這一行:

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

    - 或 -

  • 更新指令清單編輯器中的 Android 指令清單:

    在 Visual Studio 中按兩下 [平臺/Android/AndroidManifest.xml ] 檔案,以開啟 Android 指令清單編輯器。 然後,在 [必要許可權] 底下,檢查BATTERY_STATS許可權。 這將會自動更新 AndroidManifest.xml 檔案。

檢查電池狀態

您可以藉由存取 屬性來 Battery.Default 檢查電池狀態,這是介面的預設實作 IBattery 。 此介面會定義各種屬性,以提供電池狀態的相關信息,例如 ChargeLevel 讀取剩餘多少電池。 屬性ChargeLevel會分別傳回介於 0.01.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% 容量時。 針對省電模式,作業系統會減少可能會耗電的活動。 當進入省電模式時,應用程式也可以透過避免進行背景處理或執行其他耗電量大的活動,以降低耗電量。

重要

若裝置已開啟低電源狀態,應用程式應該避免背景處理。

裝置的節能狀態可藉由存取 EnergySaverStatus 屬性來讀取,其為 OnOffUnknown。 如果狀態為 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();
}

電源來源

屬性 PowerSourceBatteryPowerSource 傳回列舉,指出裝置的收費方式,如果有的話。 如果未收費,則狀態為 BatteryPowerSource.BatteryBatteryPowerSource.ACBatteryPowerSource.UsbBatteryPowerSource.Wireless 值表示電池正在充電。

下列程式代碼範例會根據電源設定控制件的 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"
    };
}

平台差異

本節說明電池的平臺特定差異。

無平台差異。