IBM Worklight 6.0 - WL.Device.Geo.acquirePosition 总是返回超时

Posted

技术标签:

【中文标题】IBM Worklight 6.0 - WL.Device.Geo.acquirePosition 总是返回超时【英文标题】:IBM Worklight 6.0 - WL.Device.Geo.acquirePosition always return timeout 【发布时间】:2013-07-27 04:15:42 【问题描述】:

我正在 worklight 6.0 上构建一个应用程序,并且我正在尝试实现地理定位。

方法WL.Device.Geo.acquirePosition总是返回

"code":3,"message":"位置检索超时。"

我按照以下步骤操作:

    创建了一个新的工作灯项目

    将此代码放在我的 javascript 文件中:

    function wlCommonInit() 
        WL.Device.Geo.acquirePosition(positive, negative, 
            timeout : 30000,
            enableHighAccuracy: true,
            maximumAge:15000
        ); 
    
    
    function positive(data)    
        WL.Logger.debug("bbbbbbbbbbb2" + JSON.stringify(data));
    
    
    function negativa(data) 
            WL.Logger.debug("aaaaaaaaaaaa" + JSON.stringify(data));
    
    

    添加安卓环境

    androidManifest.xml中添加这两个权限:

    使用权限 android:name="android.permission.ACCESS_COARSE_LOCATION" 使用权限 android:name="android.permission.ACCESS_FINE_LOCATION"

    在 samsung s2 上运行 wifi 和 gps 的应用

我有什么遗漏的吗?

【问题讨论】:

【参考方案1】:

我还会在 AndroidManifest.xml 中添加以下内容:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

并确保它也存在:

<uses-feature android:name="android.hardware.wifi" />

您是否尝试使用更高的超时值?

【讨论】:

我添加了此权限并将超时设置为 120 秒,但我仍然收到超时消息。 同时检查 Android 检查设置 -> 您已启用的位置服务使用无线网络,我还必须启用位置和 Google 搜索...【参考方案2】:

请参阅此post 了解更多信息。

而不是做:

navigator.geolocation.getCurrentPosition(win, fail, opts);

你可以这样做:

var geo = cordova.require('cordova/plugin/geolocation');
geo.getCurrentPosition(win, fail,opts);

事实证明,您必须调用 Cordova 的本机模块才能在不重新启动的情况下完成这项工作。您可能解决了这个问题或忘记了,但可能会帮助其他人。

【讨论】:

【参考方案3】:

我也遇到了这个问题,这是因为我在移动设备 Geo 准备好之前使用了 WL API。

在我的例子中,我从谷歌地图示例代码中复制了代码,它初始化了所有内容:

google.maps.event.addDomListener(window, 'load', initializeMap)

然后在 initializeMap() 方法中我尝试使用 WL.Device.Geo.acquirePosition 方法。

您必须在 wlCommonInit() 方法中调用 initializeMap 方法,而不是在“windows 加载事件侦听器”中,这样​​当设备 GEO 准备好时,将完成对 WL.Device.Geo.acquirePosition() 的调用。

还要检查 Android 检查设置 -> 已启用的位置服务使用无线网络,我还必须启用位置和 Google 搜索...

【讨论】:

以上是关于IBM Worklight 6.0 - WL.Device.Geo.acquirePosition 总是返回超时的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight 6.0 - 访问 Worklight Server 时出错

IBM Worklight 6.0 - Worklight Starter Dojo 示例损坏?

IBM Worklight 6.0 - 如何将 Worklight 应用程序部署到 Worklight Server?

IBM Worklight 6.0 - 无法访问 Worklight 服务器

IBM Worklight 6.0 - 在以下期间发生内部错误:Worklight 应用程序构建器

IBM Worklight 6.0 - 移动浏览器模拟器是不是支持 Worklight 皮肤?