电池
本文介绍如何使用 .NET Multi-platform App 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 文件。
检查电池状态
可以访问 Battery.Default
属性来检查电池状态,这是 IBattery
接口的默认实现。 此接口定义各种属性,以提供有关电池状态的信息,例如用于读取电池剩余电量的 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% 以下时。 操作系统通过减少往往会消耗电池的活动来响应节能模式。 打开节能模式时,应用程序有助于避免后台处理或其他高功率活动。
重要
如果设备的节能模式状态已打开,则应用程序应避免后台处理。
可以通过访问 EnergySaverStatus 属性(On、Off 或 Unknown)读取设备的节能状态。 如果状态为 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.AC、BatteryPowerSource.Usb 和 BatteryPowerSource.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"
};
}
平台差异
本部分介绍特定于平台的电池差异。
无平台差异。