我想知道电脑何时被拔掉插头并以电池运行。一旦用上电池,我想知道电池的百分比何时达到25%。我更喜欢事件,但如果有必要,也可以进行投票。
有几种方法可以检查电脑是插上电源还是用电池。你可以投票,看看。
System.Windows.SystemParameters.PowerLineStatus == System.Windows.PowerLineStatus.Offline;
var batteryPercentage == SystemInformation.PowerStatus.BatteryLifePercent;
我不认为这有什么不好的地方,除了要投票。
你也可以使用Windows.Devices.Power.Battery.AggregateBattery.ReportUpdated的事件ReportUpdate。 这似乎和我想要的很接近。从这里你可以得到 BatteryStatus
Enum。
可能的情况是充电、放电、闲置和不在状态。我的猜测是,充电或闲置必然意味着笔记本是插着电源的,而放电则意味着它只是在使用电池。 但这只是我的猜测。 文件中并没有这样说。我可以想象,你可能有一个非常糟糕的电池,即使它是插入式的放电。 我怎么才能确定它是否插上了电?
此外,事件真的太多了。 我真的不希望出现插上电源充电,电池百分比上升的事件。 我真的只关心它是否插电,一旦插电,到了25%。 我想如果事件不多,我可以忽略这些不必要的信息。有没有办法减少或选择活动,或者是活动不多,我应该忽略这些?
我真的只关心它是否被拔掉了插头,一旦它被拔掉了插头,就会达到25%的电量。
请检查 获取电池信息一旦你有了一个聚合电池对象,调用 GetReport
以获得相应的 BatteryReport
.
当电池的电量、容量或状态发生变化时,电池对象会触发 ReportUpdated 事件。通常情况下,状态变化会立即发生,其他变化会定期发生。
Battery.AggregateBattery.ReportUpdated += AggregateBattery_ReportUpdated;
async private void AggregateBattery_ReportUpdated(Battery sender, object args)
{
if (reportRequested)
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
// Clear UI
BatteryReportPanel.Children.Clear();
if (AggregateButton.IsChecked == true)
{
// Request aggregate battery report
RequestAggregateBatteryReport();
}
else
{
// Request individual battery report
RequestIndividualBatteryReports();
}
});
}
}
如果你只是想检测它是否被拔掉了电源,并且电量达到25%,你可以用一个方法来封装上述代码。
例如,你可以用一个方法来封装上述代码。
public static class BatteryUnpluggedTo25
{
private static Action<bool> _action;
public static void Report(Action<bool> action)
{
Battery.AggregateBattery.ReportUpdated += AggregateBattery_ReportUpdated;
_action = action;
}
private static void AggregateBattery_ReportUpdated(Battery sender, object args)
{
var aggBattery = Battery.AggregateBattery;
var report = aggBattery.GetReport();
switch (report.Status)
{
case Windows.System.Power.BatteryStatus.NotPresent:
break;
case Windows.System.Power.BatteryStatus.Discharging:
currentBatteryLevel(report, _action);
break;
case Windows.System.Power.BatteryStatus.Idle:
break;
case Windows.System.Power.BatteryStatus.Charging:
break;
default:
break;
}
}
private static void currentBatteryLevel(BatteryReport report, Action<bool> action)
{
var Maximum = Convert.ToDouble(report.FullChargeCapacityInMilliwattHours);
var Value = Convert.ToDouble(report.RemainingCapacityInMilliwattHours);
var level = Value / Maximum;
if (level <= 0.25)
{
action(true);
}
}
}
例如:
BatteryUnpluggedTo25.Report((s) =>
{
if (s == true)
{
// do something
}
});