即使在后台,我也试图以 10 或 20 秒的固定时间间隔获取设备的位置。后台服务在 android 中不工作。我已经点击了链接
https://github.com/Red-Folder/Cordova-Plugin-BackgroundService/blob/master/2.9.0/README.md
我正在使用 cordova 2.9.0。 我的后台服务代码是
var myService = cordova.require('cordova/plugin/myService');
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
getStatus();
}
function handleSuccess(data) {
updateView(data);
}
function handleError(data) {
updateView(data);
}
function getStatus()
{
startService();
myService.getStatus(function(r){handleSuccess(r)},
function(e){handleError(e)});
};
function startService()
{
myService.startService( function(r){handleSuccess(r)},
function(e){handleError(e)});
}
function updateView(data)
{
var myVar;
if (data.ServiceRunning)
{
var options = { enableHighAccuracy: true };
myVar = setInterval(function()
{
console.log("running");
navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
}, 10000);
}
else
{
clearInterval(myVar);
}
}
function stopService() {
myService.stopService(function(r){handleSuccess(r)},
function(e){handleError(e)});
}
在 onSuccess 方法中,我已将位置保存在文件中。 现在它在应用程序打开时工作正常,但在后台不工作。
最佳答案
我认为问题在于您从 javascript 代码调用地理定位(在函数 updateView()
中)。当您将应用程序置于后台时,javascript 代码的执行将停止(updateView()
函数的调用也会停止)。当应用程序在后台运行时,唯一有效的是您启动的服务。
所以你可能想要做的是改变 MyService
类的本地 android 代码并调用服务的 doWork()
函数内的地理定位(类似于他们在这里所做的, 但您将执行地理定位而不是日志:https://github.com/Red-Folder/Cordova-Plugin-BackgroundService/blob/master/2.9.0/MyService.java ):
public class MyService extends BackgroundService {
...
@Override
protected JSONObject doWork() {
//geolocate and store the results to FTP using native java code
return result;
}
...
如果您不知道如何在 android 原生代码中进行地理定位,这篇文章可能对您有用:Good way of getting the user's location in Android
关于android - 用于地理定位的后台服务在 Phonegap (android) 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25183610/