Xamarin.Essentials:電池

Battery 類別可讓您檢查裝置的電池資訊和監視變更,並提供裝置的省電狀態資訊,這說明裝置是否正在低耗電模式中執行。 若裝置已開啟低電源狀態,應用程式應該避免背景處理。

開始使用

若要開始使用此 API,請閱讀 入門指南Xamarin.Essentials,以確保連結庫已正確安裝並設定在您的專案中。

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

需要 Battery 權限,而且必須在 Android 專案中設定。 能以下列方式新增:

開啟 [Properties] 資料夾下的 AssemblyInfo.cs 檔案並新增:

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

或更新 Android 資訊清單:

開啟 [Properties] 資料夾下的 AndroidManifest.xml 檔案並在 [manifest] 節點內新增下列內容。

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

禍以滑鼠右鍵按一 Android 專案並開啟專案的屬性。 在 [Android 資訊清單] 下,尋找 [必要權限] 區域並選取 [電池] 權限。 這將會自動更新 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;

此屬性會傳回 EnergySaverStatus 列舉的成員,亦即 On, OffUnknown。 若屬性傳回 On,應用程式應該避免進行背景處理或執行其他耗電量大的活動。

應用程式也應該安裝事件處理常式。 Power 類別會公開當省電狀態變更時所觸發的事件:

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,應用程式應該停止執行背景處理。 若狀態變更為 UnknownOff,應用程式可以繼續進行背景處理。

平台差異

無平台差異。

API

Channel 9YouTube 上尋找更多 Xamarin 影片。