android - Cordova android地理定位超时

标签 android ios cordova geolocation

我对试图让地理定位在 Android 上工作感到很生气
我按照 Cordova 文档页面中的说明执行了步骤
我的 Cordova 版本是 3.1.0-0.2.0

$ cordova create myApp com.mymapackage.myApp myApp
$ cordova platform add ios
$ cordova platform add android
$ cordova plugin add org.apache.cordova.geolocation

AndroidManifest 包含
<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" />

app/res/xml/config.xml 包含
<feature name="Geolocation">
<param name="android-package" value="org.apache.cordova.geolocation.GeoBroker" />
</feature>

我还复制了简单的示例来试用地理定位
// Wait for device API libraries to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);

    // device APIs are available
    //
    function onDeviceReady() {
        navigator.geolocation.getCurrentPosition(onSuccess, onError, { timeout: 30000, enableHighAccuracy: true });
    }

    // onSuccess Geolocation
    //
    function onSuccess(position) {
        var element = document.getElementById('geolocation');
        element.innerHTML = 'Latitude: '           + position.coords.latitude              + '<br />' +
                'Longitude: '          + position.coords.longitude             + '<br />' +
                'Altitude: '           + position.coords.altitude              + '<br />' +
                'Accuracy: '           + position.coords.accuracy              + '<br />' +
                'Altitude Accuracy: '  + position.coords.altitudeAccuracy      + '<br />' +
                'Heading: '            + position.coords.heading               + '<br />' +
                'Speed: '              + position.coords.speed                 + '<br />' +
                'Timestamp: '          + position.timestamp                    + '<br />';
    }

    // onError Callback receives a PositionError object
    //
    function onError(error) {
        alert('code: '    + error.code    + '\n' +
                'message: ' + error.message + '\n');
    }

我能得到的只是一个超时错误。
我已经使用 ADT 模拟器、Genymotion 模拟器在许多不同的目标版本/设备上进行了尝试,并且无法从地理定位位置获得任何东西。
通过添加 ios 平台,在使用 xCode 进行模拟时可以非常直接地获得位置信息。

我开始对这件事感到绝望。有什么可以帮助的想法吗?

最佳答案

上游已经报告了与您的问题非常相似的问题:“地理位置 watchPosition 在带有 Cordova 3.3.0 的 Android 4.0.4 上始终超时”(issue.apache.org)

此外,众所周知,cordova 地理定位插件存在多个问题,很快就会被弃用[1]。

解决方案是使用常规的基于浏览器的地理位置。 MBillau[2] 给出的测试尝试通过插件和浏览器使用地理定位。

最后一个选择是原生或编写自己的插件。

[1] https://issues.apache.org/jira/browse/CB-5977

[2] https://github.com/apache/cordova-mobile-spec/blob/master/location/index.html

关于android - Cordova android地理定位超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19956512/

相关文章:

android - TextView 在 Android 2.x 上总是显示为单行

android - 玩游戏服务 : The application is incorrectly configured error?

ios - NSLayoutConstrain - 将尝试通过破坏约束来恢复 - 以编程方式创建约束

javascript - Apache Cordova 混合应用程序中的 ES6 模块/导入抛出 MIME 类型错误

java - 指定 jQuery 移动主页

java - 进行 whatsapp 视频通话

android - Flutter - initState() 中的复杂函数会降低导航和性能

ios - 在 applicationWillTerminate 上调用 NSURLConnection

ios - sqlite3_step 在将数据插入 sqlite 时返回错误代码 5

android - 谷歌钱包应用内支付不适用于 phonegap 框架