检测应用程序重新聚焦事件

Detect application refocus event

本文关键字:聚焦 事件 应用程序 新聚焦 检测      更新时间:2023-09-26

我需要知道用户每次开始使用应用程序的时间。

Case 1 (OK): The app is not started.

用户从头开始应用程序

我在应用程序的引导中添加了一个监听器,并且我知道它何时启动。

案例2 (TODO):应用程序已经启动,但它不再是活动的

用户从任务栏重新加载应用程序。

我想知道应用程序何时从任务栏到前台(如alt+tab)。

这很难捕捉,因为应用程序仍在运行,我不知道该听哪个事件。事实上,我甚至不知道如何命名这种行为

在Cordova中有一个用于应用程序恢复和暂停的事件,所以你不需要编辑Cordova类文件。下面是我目前在iOS/Android应用程序中使用的工作代码。

window.onload = function() {  
    //only fired once when app is opened
    document.addEventListener("deviceready", init, false);
    //re-open app when brought to foreground
    document.addEventListener("resume", init, false);
    //trigger when app is sent to background
    document.addEventListener("pause", onPause, false);
}
function init() {
    console.log('device ready or resume fired');
}

一个ios应用开发者同意帮助我。他的回答非常适合我,因为它看起来很干净且可重复使用。我将在这里生成:

"app come to前台"事件可以通过applicationWillEnterForeground事件来捕获。Phonegap/Cordova允许通过Cordova类调用javascript函数。webView对象有一个专用的方法来启动js脚本。

于是我打开了project/Classes/Cordova/AppDelegate文件。m:

- (void)applicationWillEnterForeground:(UIApplication *)application {
    NSLog(@"applicationWillEnterForeground: %@", self.viewController.webView);
    [self.viewController.webView stringByEvaluatingJavaScriptFromString:@"notifyForegroundEvent();"];
}

我添加了notifyForegroundEvent()方法在我的js文件的根的某处:

var notifyForegroundEvent = function() {
  console.log('notifyForegroundEvent()');
  // Do something here
}

等瞧

我看到在facebook(桌面,而不是移动)一段时间前,他们检查鼠标移动,以确定是否收到聊天消息应标记为已读或不。我知道这不是解决办法,但它可能会给你指明一个好的方向。我还会检查输入焦点发生了什么,当你切换到其他应用程序。也许它模糊。