Cordova android地理定位超时

Posted

技术标签:

【中文标题】Cordova android地理定位超时【英文标题】:Cordova android geolocation timeout 【发布时间】:2013-11-13 14:36:39 【问题描述】:

我对尝试让地理定位在 android 上运行感到很生气 我按照 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 进行模拟时获得位置信息非常简单。

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

【问题讨论】:

你在真正的安卓设备上试过了吗?如果您只是在模拟器上尝试,您可能需要做一些额外的事情来伪造地理位置信息。除了超时之外,您在 logcat 中是否有任何错误? 这是我绝望的地方,没有与位置获取相关的错误,并且在实际设备上也不起作用。 您是否在设备上启用了定位服务?你也跑cordova build了吗? 我刚刚尝试在运行 4.3 的 Android 设备 (Nexus 7) 上运行该示例,它运行良好。我确实创建了,添加了 android,添加了插件,将文档中的“完整示例”复制到 /www/index.html,运行 cordova build,运行 cordova run Finallay 我设法使用 Genymotion 模拟器使其工作。我没有运行cordova build,但会尝试。现在我已经将我的应用程序部署到我的 Galaxy s2 上,它仍然是一个获取位置的 pb,超时并且看起来它无法找到任何位置,尽管网络位置已激活 【参考方案1】:

上游已经报告了与您的问题非常相似的问题:“地理位置 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

【讨论】:

以上是关于Cordova android地理定位超时的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 地理定位插件问题

Cordova 地理定位插件在 android 设备上不起作用

cordova-ionic 应用程序在后台进行地理定位 - android 和 ios

Cordova 地理定位插件无法从 Android 的 GPS 获取位置

Cordova 地理定位插件有时不工作

cordova android 6.3.0 的相机和地理定位插件问题