Javascript 如何在ionic/cordova/phonegap中检查应用程序在前台或后台运行

Javascript 如何在ionic/cordova/phonegap中检查应用程序在前台或后台运行,javascript,cordova,ionic-framework,ionic3,ionic4,Javascript,Cordova,Ionic Framework,Ionic3,Ionic4,是否有任何方法可以检查应用程序是在前台还是后台运行的ionic/cordova/phonegap,我需要在android和ios上使用它,非常感谢使用两个事件“Pause”和“Resume”。您将在中找到此处的所有事件 事件-暂停: 当本机平台将应用程序置于后台时,通常当用户切换到其他应用程序时,会触发暂停事件 事件-恢复 当本机平台拉取应用程序时触发resume事件 从背景中走出来 您可以在代码中添加该事件的Eventlistener。对于这两个事件: 暂停-快速示例 document

是否有任何方法可以检查应用程序是在前台还是后台运行的ionic/cordova/phonegap,我需要在android和ios上使用它,非常感谢使用两个事件“
Pause
”和“
Resume
”。您将在中找到此处的所有事件

事件-暂停:

  • 当本机平台将应用程序置于后台时,通常当用户切换到其他应用程序时,会触发暂停事件
事件-恢复

  • 当本机平台拉取应用程序时触发resume事件 从背景中走出来
您可以在代码中添加该事件的Eventlistener。对于这两个事件:

暂停-快速示例

document.addEventListener("pause", onPause, false);

function onPause() {
    // Handle the pause event
}
document.addEventListener("resume", onResume, false);

function onResume() {
    // Handle the resume event
}
完整示例如下所示:

<!DOCTYPE html>
<html>
  <head>
    <title>Pause Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
    function onLoad() {
        document.addEventListener("deviceready", onDeviceReady, false);
    }

    // device APIs are available
    //
    function onDeviceReady() {
        document.addEventListener("pause", onPause, false);
    }

    // Handle the pause event
    //
    function onPause() {
    }

    </script>
  </head>
  <body onload="onLoad()">
  </body>
</html>
或者像这样的完整示例

<!DOCTYPE html>
<html>
  <head>
    <title>Resume Example</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    // Wait for device API libraries to load
    //
    function onLoad() {
        document.addEventListener("deviceready", onDeviceReady, false);
    }

    // device APIs are available
    //
    function onDeviceReady() {
        document.addEventListener("resume", onResume, false);
    }

    // Handle the resume event
    //
    function onResume() {
    }

    </script>
  </head>
  <body onload="onLoad()">
  </body>
</html>

简历示例
//等待加载设备API库
//
函数onLoad(){
文件。添加的监听器(“deviceready”,OnDeviceraddy,false);
}
//设备API可用
//
函数ondevicerady(){
文件。附录列表(“简历”,onResume,false);
}
//处理恢复事件
//
函数onResume(){
}

如果你需要进一步的帮助,试试看,让我知道

基于Sithys的Ionic小型服务回答:

factory('BackgroundCheck', function($ionicPlatform){
    var service = {};
    var inBackground = false;

    $ionicPlatform.ready(function() {        
        document.addEventListener("resume", function(){inBackground = false;}, false);
        document.addEventListener("pause", function(){inBackground = true;}, false);
    });

    service.isActive = function(){
        return inBackground == false;
    }
    return service;    
})

使用爱奥尼亚平台的角度抽象

//The pause event fires when the native platform puts the application
// into the background, typically when the user switches to a different 
// application.
$ionicPlatform.on('pause', function () {
    // Handle event on pause
});
// The resume event fires when the native platform
//  pulls the application out from the background.
$ionicPlatform.on('resume', function () {
    // Handle event on resume
});
请参阅

“是否有办法检查应用程序是在前台还是后台运行?” 对

1) 当应用程序变为非活动(在后台运行)时,Cordova触发
暂停
事件,当应用程序再次变为活动(置于前台)时,Cordova触发
恢复
事件

2) 从这些事件中,可以使用变量将状态存储为“前台”或“后台”


对于离子2和离子3,溶液为:

从“离子角度”导入{Platform};
@组成部分({
模板:`好的`
})
建造商(公共平台:平台){
platform.ready()。然后(()=>{
if(平台is('cordova')){
//暂停订阅,即后台订阅
this.platform.pause.subscribe(()=>{
//你好,暂停
});
//订阅简历,即前台
this.platform.resume.subscribe(()=>{
窗口['paused']=0;
});
}
});
}
您还可以使用:

import { Platform, Config, MenuController } from '@ionic/angular';


2019年9月17日

这在
Ionic 4
app上对我来说很好用。在
Android
iOS
设备上测试

app.componet.ts



... 阅读文档。当用户关闭应用程序时,pause eventlistener会告诉您。resume eventlistener将执行相反的操作。谢谢Sithys,在这种情况下,我需要在本地存储中存储一个变量(比如a),其值将由resume/pause eventlistener更改,然后根据a的值确定应用程序的前景/背景,对吗?但感觉不是直接的,有没有更直接的方法?提前感谢恢复和暂停事件将独立于变量或类似事件触发。如果用户按下home(主页)按钮,或者用户恢复应用程序,这些事件将被激发。@Sithys-简单地监听激发的事件并不能回答@user1521398提出的问题“是否有办法检查应用程序是在前台还是后台运行”@user1521398-是的,您需要使用带有变量的
暂停
恢复
事件来存储状态(请参阅@jurer提供的答案)。感谢详细信息示例Sithyshi,一旦设备就绪,暂停/恢复事件不会立即触发。我的应用程序应该在应用程序的另一个页面上检测到此事件,在此期间,我的应用程序可能处于后台。我如何才能做到这一点?我需要知道该应用程序是否已在后台启动(如在VoIP推送之后)。你知道怎么做吗?我可以在Pause事件中添加$Interval方法吗?Pause事件每5分钟执行一次位置获取任务。。它会起作用吗?这实际上是正确的答案question@tfmontague:先生,我们可以调用watchPosition函数调用内部暂停事件吗?@ManushVenkatesh-这会侦听“暂停”事件,并在应用程序暂停之前执行一些代码。一旦应用程序暂停,我不相信它会继续执行任何代码。您需要在后台线程中运行代码,类似于“”。@KapilSoni-否,这将侦听“暂停”事件,并在暂停应用程序之前执行一些代码。一旦应用程序暂停,我不相信它会继续执行任何代码。您需要在后台线程中运行代码,例如“”。为什么要将window['paused']=0?检查应用是否在前台?是,当应用进入前台模式时,我为我的案例设置了它。你们不需要它。好吧,酷,实际上在iOS中,当应用程序处于前台状态时,我不会收到firebase推送通知。所以我正在考虑创建自己的本地通知,通过检查平台和前景条件。。。并将数据传递给它。你使用哪个插件来通知?phonegap插件pushI尝试了你的代码,但我可以调用watchPosition函数调用内部暂停事件吗?@Kapilsoni你必须实现前台服务或后台模式
import { Platform, Config, MenuController } from '@ionic/angular';
constructor( private platform: Platform)
this.platform.resume.subscribe(() => {
      // Handle event on resume
    });


this.platform.pause.subscribe(() => {
          // Handle event on pause
        });
async initializeApp() {
    await this.platform.ready();

    if (this.platform.is('cordova')) {
        this.setPlatformListener();
   }
 }


  setPlatformListener() {
    this.platform.pause.subscribe(() => {// background
      console.log('In Background');
    });

    this.platform.resume.subscribe(() => {// foreground
      console.log('In Foreground');
    });
  }
initializeApp() {
  //Subscribe on pause i.e. background or lock phone
       this.platform.pause.subscribe(() => {
          console.log('pause')
      });
  //Subscribe on pause i.e. background or unlock phone
      this.platform.resume.subscribe(() => {
          console.log('resume');
     });
}