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