0

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

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

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

我按照以下步骤操作:

  1. 创建了一个新的工作灯项目
  2. 将此代码放在我的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));
    }
    
  3. 添加安卓环境

  4. 在 AndroidManifest.xml 中添加这两个权限:

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

  5. 在带有 wifi 和 gps 的三星 s2 上运行该应用程序

有什么我想念的吗?

4

3 回答 3

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" />

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

于 2013-07-26T19:22:18.507 回答
0

有关更多信息,请参阅此帖子

而不是这样做:

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

你可以这样做:

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

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

于 2013-10-14T21:48:12.127 回答
0

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

就我而言,我从谷歌地图示例代码中复制了代码,并使用以下内容初始化所有内容:

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

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

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

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

于 2013-10-24T08:03:06.677 回答