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

标签 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 方法中,我已将位置保存在文件中。 现在它在应用程序打开时工作正常,但在后台不工作。

最佳答案

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

相关文章:

java - 我应该将数据保存到静态类变量还是将其传递给 Activity ?

android - 围绕给定点 2D 沿圆运动

ios - ParseClientConfiguration - 未解析的 ios sdk v1.12.0

mobile - 从 Sencha Touch 2 或 Sencha Touch 1.x 开始哪个更好?

android - 带有 CollapsingToolbar 和 NestedScrollView 的谷歌地图

objective-c - Cydia 应用程序文档文件夹未创建

iphone - 我如何在监视核心数据时复制 NSFetchedResultsController 正在做的事情?

android - Cordova 构建 android - 错误 : android sdk not found (but is installed and ANDROID_HOME set correctly on OS X)

ios - 错误 : Visual Studio Cordova Command failed with exit code 69

android - 如何要求用户打开位置