Windows runtime WinRT-如何判断设备是电池供电还是墙壁供电?

Windows runtime WinRT-如何判断设备是电池供电还是墙壁供电?,windows-runtime,microsoft-metro,windows-applications,Windows Runtime,Microsoft Metro,Windows Applications,比如说,我想定制我的应用程序,使其在使用电池电源运行时能够调节吞吐量,但当它插入墙上的插座时,就可以全速运行 是否有一个事件可以插入以检测这些事情何时发生,例如检测到internet连接时?显然,您可以插入其中。它只有在设备插入时才会触发。IE和WebView可以轮询cpu电源状态 如: 在c#/xaml中,请尝试: XAML html/js <!DOCTYPE html> <html> <head> <title>JSBatteryChe

比如说,我想定制我的应用程序,使其在使用电池电源运行时能够调节吞吐量,但当它插入墙上的插座时,就可以全速运行

是否有一个事件可以插入以检测这些事情何时发生,例如检测到internet连接时?

显然,您可以插入其中。它只有在设备插入时才会触发。

IE和WebView可以轮询cpu电源状态 如: 在c#/xaml中,请尝试:

XAML

html/js

<!DOCTYPE html>
<html>
<head>
    <title>JSBatteryCheck</title>
    <script type="text/javascript">

        var batterytimeOut;
        var timeOutGo = true;
        var lastDisplayUpdateTime = new Date();
        var MilliSeconds = 1000;
        var displayUpdateInterval = 200;
        var values = [];
        var maxValues = displayUpdateInterval;

        var PluggedIn = true;
        var currentTicksPerMilliSecond = 0;

        function GetTicksPerSecond() {
            if ((new Date() - lastDisplayUpdateTime) >= displayUpdateInterval) {
                lastDisplayUpdateTime = new Date;
                currentTicksPerMilliSecond = Avg();
                values = [];
                if (!isNaN(currentTicksPerMilliSecond)) {

                    PluggedIn = (currentTicksPerMilliSecond > 9) ? false : true;
                }
            }
            else Tick();

            if (timeOutGo) batterytimeOut = setTimeout(function () { GetTicksPerSecond() }, 1);
        }

        function StartTimer() {
            timeOutGo = true;
            GetTicksPerSecond();
            return "";
        }

        function Tick() {
            if (values.length > maxValues) values.shift();
            else values.push(new Date());
        }

        function Avg() {
            if (values.length > 1) {
                var earliest = values[0];
                var latest = values[values.length - 1];
                var elapsed = latest - earliest;
                var elapsedSeconds = elapsed / MilliSeconds;
                var avg = MilliSeconds / ((values.length - 1) / elapsedSeconds);
                return parseInt(avg);
            }
            else return NaN;
        }

        function StopTimeOut() {
            clearTimeout(batterytimeOut);
            batterytimeOut = null;
            timeOutGo = false;
        }


        function IsPluggedIn() {
            return String(PluggedIn);
        }

    </script>
</head>
<body onload="GetTicksPerSecond()">
    <div id="PowerStatus"></div>
    <button onclick="StopTimeOut()">Stop timeout</button>
</body>
</html>

JSBatteryCheck
var-batterytimeOut;
var timeOutGo=true;
var lastDisplayUpdateTime=新日期();
var毫秒=1000;
var displayUpdateInterval=200;
var值=[];
var maxValues=displayUpdateInterval;
var PluggedIn=真;
var currentTickPermillSecond=0;
函数GetTicksPerSecond(){
如果((新日期()-lastDisplayUpdateTime)>=displayUpdateInterval){
lastDisplayUpdateTime=新日期;
CurrentTickspermillSecond=平均值();
值=[];
如果(!isNaN(当前毫秒)){
PluggedIn=(当前毫秒>9)?false:true;
}
}
否则勾选();
if(timeOutGo)batterytimeOut=setTimeout(函数(){GetTicksPerSecond()},1);
}
函数StartTimer(){
timeOutGo=true;
GetTicksPerSecond();
返回“”;
}
函数Tick(){
如果(values.length>maxValues)values.shift();
else值。推送(新日期());
}
函数Avg(){
如果(值.length>1){
var=值[0];
var latest=值[values.length-1];
var经过=最新-最早;
var elapsedSeconds=已用时间/毫秒;
var avg=毫秒/(values.length-1)/elapsedsons);
返回parseInt(平均值);
}
否则返回NaN;
}
函数StopTimeOut(){
clearTimeout(电池超时);
batterytimeOut=null;
timeOutGo=false;
}
函数IsPluggedIn(){
返回字符串(PluggedIn);
}
停止超时

对于后台任务,SystemTriggerType.BackgroundWorkCostChange事件是最好的,但需要锁定屏幕访问

我正在删除我的答案,因为代码未通过WACK验证<代码>GetSystemPowerStatus不在中。您的问题已在此处得到回答:
var PeriodicTimer = ThreadPoolTimer.CreatePeriodicTimer(async (timer) =>
            {
                await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Low,
                async () =>
                {
                    if (Window.Current.Visible) BatteryStatus.IsOn= Convert.ToBoolean(await BatteryCheck_WV.InvokeScriptAsync("IsPluggedIn", null));

                });
            }, new TimeSpan(0, 0, 0, 1, 0));
<!DOCTYPE html>
<html>
<head>
    <title>JSBatteryCheck</title>
    <script type="text/javascript">

        var batterytimeOut;
        var timeOutGo = true;
        var lastDisplayUpdateTime = new Date();
        var MilliSeconds = 1000;
        var displayUpdateInterval = 200;
        var values = [];
        var maxValues = displayUpdateInterval;

        var PluggedIn = true;
        var currentTicksPerMilliSecond = 0;

        function GetTicksPerSecond() {
            if ((new Date() - lastDisplayUpdateTime) >= displayUpdateInterval) {
                lastDisplayUpdateTime = new Date;
                currentTicksPerMilliSecond = Avg();
                values = [];
                if (!isNaN(currentTicksPerMilliSecond)) {

                    PluggedIn = (currentTicksPerMilliSecond > 9) ? false : true;
                }
            }
            else Tick();

            if (timeOutGo) batterytimeOut = setTimeout(function () { GetTicksPerSecond() }, 1);
        }

        function StartTimer() {
            timeOutGo = true;
            GetTicksPerSecond();
            return "";
        }

        function Tick() {
            if (values.length > maxValues) values.shift();
            else values.push(new Date());
        }

        function Avg() {
            if (values.length > 1) {
                var earliest = values[0];
                var latest = values[values.length - 1];
                var elapsed = latest - earliest;
                var elapsedSeconds = elapsed / MilliSeconds;
                var avg = MilliSeconds / ((values.length - 1) / elapsedSeconds);
                return parseInt(avg);
            }
            else return NaN;
        }

        function StopTimeOut() {
            clearTimeout(batterytimeOut);
            batterytimeOut = null;
            timeOutGo = false;
        }


        function IsPluggedIn() {
            return String(PluggedIn);
        }

    </script>
</head>
<body onload="GetTicksPerSecond()">
    <div id="PowerStatus"></div>
    <button onclick="StopTimeOut()">Stop timeout</button>
</body>
</html>