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

6
我需要知道每当用户开始使用应用程序的时间。
情况1(OK):应用程序没有启动。
用户从头开始启动应用程序。
我在应用程序的引导程序上添加了一个监听器,我知道它何时启动。
情况2(TODO):应用程序已经启动,但不再活动状态
用户从任务栏重新加载应用程序。
我想知道应用程序从任务栏返回前景时的时间(如alt + tab)。
这很难捕捉,因为应用程序仍在运行,我不知道要监听哪个事件。事实上,我甚至不知道如何命名这种行为。

为什么这被标记为“iPad”? - Dancreek
由于该应用程序旨在在iPad上运行,因此使用cordova/sencha touch框架。 - vaugham
3个回答

6

在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');
}

4

一个iOS应用程序开发人员同意帮助我。他的答案很适合我,因为它看起来干净且可重复使用。因此,我将在这里提供它:

“应用程序进入前台”事件可以通过applicationWillEnterForeground事件捕获。 Phonegap/Cordova允许通过Cordova类调用JavaScript函数。 webView对象有一个专用方法来启动js脚本。

所以我打开了文件Projet/Classes/Cordova/AppDelegate.m:

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

}

我在我的js文件的根目录中添加了notifyForegroundEvent()方法:

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

Et voilà


2

我曾经在Facebook(桌面版,而非手机版)上看到过这样的情况:他们通过检测鼠标移动来确定接收到的聊天消息是否应该标记为已读。我知道这不是解决方案,但它可能会指引你朝着正确的方向去解决问题。我还建议你检查一下当你切换到其他应用程序时,输入焦点会发生什么。也许它会失焦。


不错的想法,尽管我认为如果解决方案没有在Sencha Touch中实现,我会去寻找一些Objective-C的东西。 - vaugham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接