地理定位的后台服务在Phonegap(android)中不起作用

时间:2014-08-07 13:17:19

标签: android ios cordova

即使在后台,我也试图将设备的位置设置为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方法中,我已将位置保存在文件中。 现在它在应用程序打开时工作正常但不在后台运行。

1 个答案:

答案 0 :(得分:1)

我认为问题在于您从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