Xamarin.Essentials:电池

Battery类允许检查设备的电池信息、监视更改,并提供有关设备的节能模式状态的信息,该状态指示设备是否正在低功耗模式下运行。 如果设备的节能模式状态已打开,则应用程序应避免后台处理。

入门

若要开始使用此 API,请阅读 Xamarin.Essentials 的入门指南,确保在项目中正确安装和设置库。

若要访问 Battery 功能,需要以下特定于平台的设置。

需要具有 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 清单”下找到“所需权限:”区域,然后选中“Battery”权限 。 这样会自动更新 AndroidManifest.xml 文件。

使用 Battery

在类中添加对 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 枚举的成员,可以是 OnOffUnknown。 如果该属性返回 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,则应用程序应停止执行后台处理。 如果状态更改为 UnknownOff,则应用程序可以继续执行后台处理。

平台差异

无平台差异。

API

第 9 频道YouTube 上查找更多 Xamarin 视频。