我有一个离子应用程序,当应用程序位于前台时,应用程序的行为方式如下。应用程序中的服务每隔x秒使用navigator.geolocation检查地理位置,并根据它调用另一个服务的坐标来执行一些http调用。现在,当应用程序处于后台时,这些事情显然不起作用,但是我的应用程序能够执行这些检测并进行这些调用非常重要(其中包括更改service.js中的一些变量)
到目前为止,我的app.js中有以下代码。
document.addEventListener('deviceready', function () {
// Android customization
cordova.plugins.backgroundMode.setDefaults({ title: "XYZ",
ticker: "XYZ is running on background",
text: "XYZ is keeping track now on the background. This is a test message"});
// Enable background mode
cordova.plugins.backgroundMode.enable();
cordova.plugins.backgroundMode.onfailure = function(errorCode){
console.log("failed")
};
// Called when background mode has been activated
cordova.plugins.backgroundMode.onactivate = function () {
console.log("Hello from background!); // works fine
////////////////// This piece of code doesn't execute /////////////
function success(position){
console.log("In success function");
MyService.doStuff(); // This will make some http calls
}
function success(position){
console.log("In success function");
MyService.doStuff(); // This will make some http calls
}
function error(error){
console.log("In error function");
}
var options = {timeout: 60000, enableHighAccuracy: true}; // options for checking geolocation
navigator.geolocation.getCurrentPosition(success, error, options); // eventually I'd like to add setInterval to this piece, so it executes every x seconds
//////////////////////////////////////////////////////////////////
}
cordova.plugins.backgroundMode.ondeactivate = function() {
console.log("Bye Bye from Background!"); // works fine
};
}, false);
如果这样可行,我应该能够在函数和setInterval中包装该片段,因此每x秒检查一次该位置。任何人都可以建议我如何在后台进行这项工作。当我在前台执行此操作时,它工作正常。
Android:5.1.1
答案 0 :(得分:1)
@Purpamine,
好消息是你在许多开发人员绊倒的情况下取得了成功。
使用Cordova / Phonegap,大多数需要完成的事情(在移动设备上)都是以三种方式之一完成的:
在您的情况下,您正在使用"核心" geolocation library。如果您在Cordova Plugin repository搜索geolocation(此时),您会找到24个插件。添加关键字background
,您将离开9 plugins。这些插件中的大多数都适用于Android和iOS。目前,似乎没有适用于 * winphone * 的地理位置背景插件。由于我没有完成这项任务(背景),我现在不能推荐任何插件。
您应该知道其中许多插件都基于"核心"图书馆,你所做的大部分工作仍然有效。
最后一件事是,我在几个月前(2015年11月28日)发表了from a post。
从Android 6.0 SDK-23(Marshmallow)开始,Google正在实施影响后台运营的新功能/障碍。这两个(2)是相关的,称为 DOZE 和 App Suspend 。这些新功能的重点是#34;是为了节省电池寿命。
在最糟糕的情况下,即时消息将被丢弃。在另一种情况下,您的应用每天只能使用 的网络或后台操作。在另一种情况下,您可以每15分钟进行一次操作。在最好的情况下,您可以获得精确的时间操作,但
JobScheduler
之类的内容仍然会失败。哦,我找到的
whitelist
列表参考是让最终用户将您的应用添加到移动设备上的whitelist
。这意味着您可以要求最终用户将您的应用放在白名单中,这样您就可以部分忽略 DOZE 和 App Suspend 。然而,(谷歌)文档警告:
注意:除非应用程序的核心功能受到不利影响,否则Google Play政策会禁止应用程序直接豁免Android 6.0+(Doze和App Standby)中的电源管理功能。
我已经对此做了初步调查,我发现很少有文章,博客文章或SO帖子。 (...)与此同时,我有笔记 Android 6.0 & Doze
Android(官方) Optimizing for Doze and App Standby