android - Cordova Geolocation 插件在 Android 上返回空位置对象

标签 android html cordova geolocation cordova-plugins

我在使用 Geolocation Cordova 插件 (org.apache.cordova.geolocation) 时遇到了很多问题。它在 iOS 上运行良好,但在 Android 上则完全不行。

据我所知,该插件曾经包含原生 Android 代码,但在某个时候被删除了,因为它有太多错误/太慢,而原生 web HTML5 实现更加稳定和快速。

如果我使用仍然具有 native 代码的最新插件版本 (0.3.2),它确实可以工作(但速度很慢,而且确实并非总是如此)。但是当它确实返回时,位置对象总是被填充。

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

如果我完全删除插件,并手动将权限添加到 Android 项目:

<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 控制台中没有显示任何错误。有什么想法吗?

最佳答案

OK,调试了很久,发现问题所在。显然,getCurrentPosition() 函数在 Android 中返回一个“特殊”对象,在使用 JSON.stringify() 时其计算结果为 {}。如果我将原始返回对象输出到控制台,结果发现它根本不是空的。

因此,通过可笑的调整修复了我的代码:

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 应用程序,所以我总是应用上述调整。

关于android - Cordova Geolocation 插件在 Android 上返回空位置对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32882035/

相关文章:

android - 在 Flash Builder 4.5 中,有没有办法知道我在编译时将项目构建到哪个平台(android 或 iOs)?

html - 相对 div 中图像的对齐命令没有响应

javascript - 从相机获取文件后,cordova.js 出现错误

javascript - 如何导入 navigator.notification.alert 插件 PhoneGap

java - 未找到 PhoneGap/Cordova "javac -version"。

android动画将 View 移动到另一个 View

Android Maven 插件 apklib Mojo 在生成的 apklib 中不包含已编译的 R

android - Gluon 移动应用 NavigationDrawer 后退按钮问题

python - 如何将来自 python 的值插入 html 文件的主体部分?

javascript - CSS 或 jQuery 可以覆盖注入(inject)的 onkeyup 属性吗?