科尔多瓦地理位置插件返回Android上的空位置对象 [英] Cordova Geolocation plugin returning empty position object on Android

查看:186
本文介绍了科尔多瓦地理位置插件返回Android上的空位置对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经与地理位置科尔多瓦插件(org.apache.cordova.geolocation)颇有些问题。它适用于iOS很好,但它并没有在所有的Andr​​oid上。

I've had quite some issues with the Geolocation Cordova plugin (org.apache.cordova.geolocation). It works fine on iOS, but it doesn't at all on Android.

据我了解,用于包括原生的Andr​​oid code中的插件,但在某一点去掉,因为它太马车/慢和本地网络HTML5实现了更加稳定和快速。

As I understand, the plugin used to include native Android code, but this was removed at some point, because it was too buggy/slow and the native web HTML5 implementation was much more stable and fast.

如果我用的是最新的插件版本(0.3.2),它仍然具有天然code,它的工作(但速度慢,事实上,并不总是)。但是,当它不返回,位置对象总是填充。

If I use the latest plugin version (0.3.2) which still has the native code, it does work (but slow and indeed, not always). But when it does return, the position object is always populated.

如果我用的是最新的插件版本(1.0.1)中,getCurrentPosition()立即用一个空的对象返回({})。它不会引发错误。

If I use the latest plugin version (1.0.1), the getCurrentPosition() immediately returns with an empty object ({}). It does not throw an error.

如果我完全删除插件,并手动添加权限的Andr​​oid项目:

If I remove the plugin completely, and add the permissions manually to the Android project:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

同样的事情发生。我只是无法得到它的工作,但它没有任何意义。没有错误显示在Android控制台。有什么想法?

The same thing happens. I just can't get it to work, but it doesn't make sense. No errors are displayed in the Android console. Any thoughts?

推荐答案

OK,调试的很长很长一段时间后,我发现这个问题。显然,getCurrentPosition()函数返回一个Android的特殊对象,计算结果为{}透过JSON.stringify()时。如果我输出的原始返回对象到控制台,事实证明它是不是空的。

OK, after a long long time of debugging, I found the problem. Apparently, the getCurrentPosition() function returns a 'special' object in Android, which evaluates to {} when using JSON.stringify(). If I outputted the raw return object to the console, it turned out it wasn't empty at all.

所以,下面的可笑的调整固定我的code:

So, following ridiculous adjustments fixed my code:

navigator.geolocation.getCurrentPosition(function (position) {
    var positionObject = {};

    if ('coords' in position) {
        positionObject.coords = {};

        if ('latitude' in position.coords) {
            positionObject.coords.latitude = position.coords.latitude;
        }
        if ('longitude' in position.coords) {
            positionObject.coords.longitude = position.coords.longitude;
        }
        if ('accuracy' in position.coords) {
            positionObject.coords.accuracy = position.coords.accuracy;
        }
        if ('altitude' in position.coords) {
            positionObject.coords.altitude = position.coords.altitude;
        }
        if ('altitudeAccuracy' in position.coords) {
            positionObject.coords.altitudeAccuracy = position.coords.altitudeAccuracy;
        }
        if ('heading' in position.coords) {
            positionObject.coords.heading = position.coords.heading;
        }
        if ('speed' in position.coords) {
            positionObject.coords.speed = position.coords.speed;
        }
    }

    if ('timestamp' in position) {
        positionObject.timestamp = position.timestamp;
    }

    // Use the positionObject instead of the position 'object'
    alert(JSON.stringify(positionObject));            
}

iOS的正常工作没有上述调整,但由于我的应用程序是一个应用程序的PhoneGap,我总是应用之上。

iOS works fine without above adjustments, but as my app is a Phonegap application, I always apply the above.

这篇关于科尔多瓦地理位置插件返回Android上的空位置对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆