我正在尝试使用 Windows 8 Store 应用程序 API 检测用户在应用程序或系统范围内处于非活动状态的时间。
我调查了系统触发器用户离开但是它只是告诉你它什么时候空闲。不允许您指定特定时间。我还查看了 Pointer Pressed 并尝试检测点击或触摸事件;但这不起作用,因为我使用的是 web 视图并且无法通过 web 视图捕获 PointerPressed 事件。
有什么方法可以检测用户是否在应用程序或系统范围内闲置了 X 时间?任何帮助表示赞赏,谢谢!
我正在尝试使用 Windows 8 Store 应用程序 API 检测用户在应用程序或系统范围内处于非活动状态的时间。
我调查了系统触发器用户离开但是它只是告诉你它什么时候空闲。不允许您指定特定时间。我还查看了 Pointer Pressed 并尝试检测点击或触摸事件;但这不起作用,因为我使用的是 web 视图并且无法通过 web 视图捕获 PointerPressed 事件。
有什么方法可以检测用户是否在应用程序或系统范围内闲置了 X 时间?任何帮助表示赞赏,谢谢!
我最终用javascript检测了按键和鼠标按下事件。在 LoadCompleted 事件中,我使用 AW_WebView.InvokeScript("eval", new string[] { scriptsString });
按键脚本:
window.document.body.onkeydown = function(event){
window.external.notify('key_pressed');
};
鼠标按下脚本:
document.onmousedown = function documentMouseDown(e){
window.external.notify('mouse_down');
}
您可以为其他用户事件添加其他脚本。
当检测到鼠标按下或按键按下时,window.external.notify("keypress or mouse down") 被执行。此消息在我的 WebView_ScriptNotify 事件中“收到”。当我收到来自 WebView 的消息时,我设置了一个计时器。如果定时器已经设置,它会取消它并再次启动定时器。当计时器结束时,一些代码被执行。
private void SetTimer(int time)
{
if (!TimerEnabled)
{
return;
}
else
{
if (DelayTimer != null)
{
DelayTimer.Cancel();
DelayTimer = null;
}
//the timeout
TimeSpan delay = TimeSpan.FromSeconds(time);
bool completed = false;
DelayTimer = ThreadPoolTimer.CreateTimer(
(source) =>
{
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher.RunAsync(
CoreDispatcherPriority.High,
() =>
{
//
// UI components can be accessed within this scope.
//THIS CODE GETS EXECUTED WHEN TIMER HAS FINISHED
});
completed = true;
},
delay,
(source) =>
{
//
// TODO: Handle work cancellation/completion.
//
//
// Update the UI thread by using the UI core dispatcher.
//
Dispatcher.RunAsync(
CoreDispatcherPriority.High,
() =>
{
//
// UI components can be accessed within this scope.
//
if (completed)
{
// Timer completed.
}
else
{
// Timer cancelled.
}
});
});
}
}
希望这对某人有帮助!我知道这不是完成这项工作的完美方法,但目前这对我有用。