Xamarin.Essentials:Батарея
Класс Battery позволяет получать сведения о батарее устройства, отслеживать изменения и просматривать информацию о состоянии энергосбережения (находится ли устройство в режиме пониженного энергопотребления). Приложениям следует избегать фоновой обработки, если на устройстве включено состояние экономии электроэнергии.
Чтобы начать использовать этот API, ознакомьтесь с руководством по началу работы с Xamarin.Essentials, чтобы правильно настроить и установить библиотеку в проектах.
Для доступа к функции Battery нужно создать описанную ниже конфигурацию для конкретной платформы.
Требуется разрешение Battery
, которое следует настроить в проекте Android. Для этого можно применить любой из следующих методов:
Откройте файл AssemblyInfo.cs в папке Свойства и добавьте в него:
[assembly: UsesPermission(Android.Manifest.Permission.BatteryStats)]
ИЛИ обновите манифест Android:
Откройте файл AndroidManifest.xml в папке Properties и добавьте приведенный ниже код в узел manifest.
<uses-permission android:name="android.permission.BATTERY_STATS" />
ИЛИ щелкните правой кнопкой мыши проект Android и откройте свойства проекта. В разделе Манифест Android найдите область Требуемые разрешения: и установите флажок для разрешения Battery. Это действие автоматически обновляет файл 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
, Off
или Unknown
. Если свойство возвращает значение 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
, приложение должно прекратить выполнение фоновой обработки. Если состояние изменится на Unknown
или Off
, приложение может возобновить фоновую обработку.