【问题标题】:Android how to detect when app is paused and resumedAndroid如何检测应用程序何时暂停和恢复
【发布时间】:2018-06-19 18:02:44
【问题描述】:

我正在尝试检测 Android 应用当前是否处于活动状态,并认为我可以通过侦听 Ti.Apppauseresume 事件来做到这一点。但是,当应用被推送到后台或被带到前台时,这些事件永远不会触发。

我试图监听这样的事件:

Ti.App.addEventListener('resume', function(){
    Ti.API.log("resume event triggered");
});
Ti.App.addEventListener('pause', function(){
    Ti.API.log("paused event triggered");
});

这些事件永远不会被调用。在四处搜索后,我发现许多其他人也遇到了同样的问题,但我找不到与最新版本的 Appcelerator 相关的任何内容。

应该如何“正确”地做到这一点?

【问题讨论】:

  • 只是另一种想法/方式:您可以在所有活动的 onResume() 中设置布尔值 isActivityActive 并将它们保存在 sharedPreferences 中。然后,您可以使用or 运算符来检测是否有任何活动处于活动状态。如果您有活动的活动,则表示您的应用程序当前正在运行。不要忘记在所有活动的onPause() 方法中将布尔值设置为false

标签: android appcelerator appcelerator-titanium


【解决方案1】:

您收听的事件仅适用于 iOS。

如果您的应用只有一个 Activity,Android Activity 的 onPause 和 onResume 可能会有所帮助。

通常情况并非如此。 This 是我目前找到的最佳解决方案。

【讨论】:

  • 为那个帖子点赞,对我来说,模块“bencoding.android.tools”救了我,我强烈推荐它。
  • 是的,这是最好的解决方案。也适合我。
【解决方案2】:

我开发了一个 Android 应用程序,它在活动的onResume 上调用一个函数。所以我认为这是一个类似的情况。

我使用了这个代码:

$.nameWin.addEventListener('open', function() {
    if (!$.nameWin.activityListenerLoaded) {
        var activity = $.nameWin.activity;
        ['resume'].forEach(function(e) {   
            activity.addEventListener(e, function() {
                //doSomething
            });
        });
       $.nameWin.activityListenerLoaded = true;
   }
});

通过这种方式,您可以在每次活动恢复时调用函数或执行某些操作。

告诉我。

问候

【讨论】:

    【解决方案3】:

    尝试在主“活动”中监听 onPause / onResume 事件。

    http://docs.appcelerator.com/platform/latest/#!/api/Titanium.Android.Activity

    例如:

    var main_activity = Ti.Android.currentActivity;
    // var intent = main_activity.getIntent();
    // var uri = intent.getData();
    
    main_activity.addEventListener('pause', function(e) {
        console.log('ANDROID APP PAUSED');
    });
    main_activity.addEventListener('resume', function(e) {
        // uri = intent.getData();
        console.log('ANDROID APP RESUMED');
        return;
    });
    

    【讨论】:

      【解决方案4】:

      使用 Titanium SDK 3.2.0:

      Ti.Android.currentActivity.addEventListener('userleavehint', function(e){
          self.onAppPaused();
      });
      Ti.Android.currentActivity.addEventListener("newintent",function(){
          self.onAppResumed();
      });
      

      【讨论】:

        【解决方案5】:

        我已经使用bencoding.android.tools 模块很长时间了。

        我现在已经为此构建并发布了 Hyperloop 模块:

        https://github.com/dieskim/Appcelerator.Hyperloop.appPauseResume

        用于检测应用在 iOS 和 Android 上是否暂停或恢复的跨平台 Hyperloop 模块

        • iOS 使用核心 T.App EventListeners 暂停和恢复
        • Android 通过 Hyperloop 和 setInterval 使用 Narive Java 类进行检查和检测

        例子:

        // require appPauseResumeModule
        var appPauseResume = require('appPauseResume');
        // run appPauseResume and add resume and pause callbacks
        appPauseResume({pause: function(){
                            Ti.API.info("appPauseResume - pause");
                        },
                        resume: function(){
                            Ti.API.info("appPauseResume - resume");
                        },
                        setIntervalTime: 1000,  // Optional - Default: 1000 miliseconds (1 second) 
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-13
          • 1970-01-01
          • 2013-05-29
          • 2017-04-09
          • 2014-01-21
          • 2017-11-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多