IBM Worklight 6.0 - WL.Device.Geo.acquirePosition始终返回超时

时间:2013-07-26 19:04:46

标签: android gps wifi ibm-mobilefirst worklight-geolocation

我正在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. 添加Android环境

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

    uses-permission android:name =“android.permission.ACCESS_COARSE_LOCATION”
    uses-permission android:name =“android.permission.ACCESS_FINE_LOCATION”

  5. 使用wifi和gps在samsung s2上运行应用程序

  6. 有什么我想念的吗?

3 个答案:

答案 0 :(得分: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" />

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

答案 1 :(得分:0)

有关详细信息,请参阅此post

而不是:

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

你可以这样做:

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

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

答案 2 :(得分: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检入设置 - &gt;您已启用的位置服务使用无线网络,我还必须启用位置和Google搜索...