首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Phonegap/Cordova地理定位在Android上不起作用

Phonegap/Cordova地理定位在Android上不起作用
EN

Stack Overflow用户
提问于 2013-10-21 18:21:22
回答 9查看 40.8K关注 0票数 20

我在模拟器(甚至当我通过远程登录geo fix时)和设备上都很难让地理定位在Android上工作。适用于iOS、WP8和浏览器。

当我使用下面的代码询问设备的位置时,我总是得到一个错误(在我的例子中,错误代码和错误消息都是带有null的自定义Retrieving your position failed for unknown reason. )。

相关代码:

代码语言:javascript
复制
    successHandler = (position) ->
      resolve App.Location.create
        lat: position.coords.latitude
        lng: position.coords.longitude

    errorHandler = (error) ->
      error = switch error.code
        when 1
          App.LocationError.create
            message: 'You haven\'t shared your location.'
        when 2
          App.LocationError.create
            message: 'Couldn\'t detect your current location.'
        when 3
          App.LocationError.create
            message: 'Retrieving your position timeouted.'
        else
          App.LocationError.create
            message: 'Retrieving your position failed for unknown reason. Error code: ' + error.code + '. Error message: ' + error.message

      reject(error)

    options =
      maximumAge: Infinity # I also tried with 0
      timeout: 60000
      enableHighAccuracy: true
    navigator.geolocation.getCurrentPosition(successHandler, errorHandler, options)

platforms/android/AndroidManifest.xml

代码语言:javascript
复制
<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" />

www/config.xml (以防万一)

代码语言:javascript
复制
<feature name="Geolocation">
    <param name="android-package" value="org.apache.cordova.GeoBroker" />
</feature>

使用Cordova 3.1.0。在Android 4.2上进行测试。已安装插件。index.html中包含的Cordova.js ( InAppBrowser等其他插件运行良好)。

代码语言:javascript
复制
$ cordova plugins ls
[ 'org.apache.cordova.console',
'org.apache.cordova.device',
'org.apache.cordova.dialogs',
'org.apache.cordova.geolocation',
'org.apache.cordova.inappbrowser',
'org.apache.cordova.vibration' ]

我一无所知。我是不是遗漏了什么?

EN

回答 9

Stack Overflow用户

发布于 2014-03-26 22:51:27

尝试这样的选项,看看它是否适用于您,就像我一样:

代码语言:javascript
复制
var options = { enableHighAccuracy: true };

navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
票数 15
EN

Stack Overflow用户

发布于 2014-04-30 15:25:29

我的解决方案是使用安卓/三星的原生HTML5地理定位支持:

代码语言:javascript
复制
// BEFORE the deviceready event has fired:

// Check if HTML5 location support exists
app.geolocation = false;
if(navigator.geolocation) {
  app.geolocation = navigator.geolocation;
} 

// AFTER the deviceready event:

if(app.geolocation) {
  var locationService = app.geolocation; // native HTML5 geolocation
}
else {
  var locationService = navigator.geolocation; // cordova geolocation plugin
}

locationService.getCurrentPosition(
    function(pos) {

    },
    function(error) {

    }, 
    {enableHighAccuracy: true, timeout: 15000}
);

对于我测试过的所有三星设备,enableHighAccuracy必须是“真的”才能工作。对于非三星设备,比如Nexus7,enableHighAccuracy也可以设置为“false”。

票数 6
EN

Stack Overflow用户

发布于 2014-06-25 22:01:23

根据https://issues.apache.org/jira/browse/CB-5977的说法,安卓插件的支持已经被移除。易明宽说:“我们使用CB-5977的原因是,新的安卓版本的网页视图将比本地应用程序接口更快地获得GPS锁定,因此删除了它。在安卓系统上添加这个插件只是增加了在你的应用程序中使用HTML5地理定位的必要权限。”

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19491875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档