Worklight 6.1定位服务示例在模拟器中工作,但不是实际的电话

时间:2014-06-02 17:46:25

标签: gps geolocation ibm-mobilefirst

我无法将Worklight“定位服务”“SmallSample”应用程序用于我的Droid 4手机。我正在使用IBM Worklight提供的"smallSample" sample project

“SmallSample”应用程序在移动浏览器模拟器中运行良好,但是当我将其安装在我的物理手机上时。 当我按下应用程序上的按钮以检索我的GPS坐标时,Android GPS图标会在我的通知栏中显示约2秒钟,然后消失。永远不会显示GPS坐标,也没有错误。

详细说明:

  • 我正在使用Worklight Developer Edition 6.1.0.01
  • 我的手机是Droid 4,Android 4.1.2(API 16)
  • 我将应用程序导入Studio,然后使用新的密钥库导出已签名的APK,并将其安装在我的手机上。
  • 我在外面使用应用程序以确保我可以获得GPS信号。
  • 其他GPS应用可以在我的手机上使用(谷歌地图)。
  • 我通过移动浏览器打开Worklight控制台验证了与Worklight Server的连接。
  • 在应用的Worklight设置中,我验证了应用正在使用正确的IP地址,端口和上下文根到我的Worklight Server。
  • 我验证了所有默认权限,包括:
<uses-permission android:name="android.permission.INTERNET"/>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>  
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

更新:
在不更改任何其他内容的情况下,我可以使用此问题中的代码在单个时间点检索设备上的GPS坐标:IBM Worklight - How to implement GPS functionality?

navigator.geolocation.getCurrentPosition(onSuccess, onError);

function onSuccess(position) {
  alert(JSON.stringify(position));
}

function onError(error) {
    alert(JSON.stringify(error));
}

上面的代码在我的手机上完美运行,并返回GPS坐标。但是,SmallSample中的代码(在上面的链接中引用)仍然不起作用。一个区别是GPS坐标在小样本中不断更新。我粘贴了下面代码的主要部分。

    WL.Device.Geo.acquirePosition(
        function(pos) {
            // when we receive the position, we display it and start on-going acquisition
            displayPosition(pos);


            var triggers = {
                Geo: {
                    posChange: { // display all movement
                        type: "PositionChange",
                        callback: function(deviceContext) {
                                displayPosition(deviceContext.Geo);
                            }
                    },

                    leftArea: { // alert when we have left the area
                        type: "Exit",
                        circle: {
                            longitude: pos.coords.longitude,
                            latitude: pos.coords.latitude,
                            radius: 200
                        },
                        callback: function() {
                            window.alert('Left the area');
                        }
                    },

                    dwellArea: { // alert when we have stayed in the vicinity for 3 seconds
                        type: "DwellInside",
                        circle: {
                            longitude: pos.coords.longitude,
                            latitude: pos.coords.latitude,
                            radius: 50
                        },
                        dwellingTime: 3000,
                        callback: function() {
                            window.alert('Still in the vicinity');
                        }
                    }
                }   
            };

            WL.Device.startAcquisition({ Geo: geoPolicy }, triggers, { Geo: alertOnGeoAcquisitionErr } );
        },
        function(geoErr) {
            alertOnGeoAcquisitionErr(geoErr);
            // try again:
            getFirstPositionAndTrack();
        },
        geoPolicy
    ); 

此外,以下是我从LogCat(调试)获得的错误:

  

06-04 15:42:00.243:D / NONE(3962):wlclient init成功

     

06-04 15:42:03.602:D / WL gps听众:位置已经过了   更新!

     

06-04 15:42:03.602:D / WL gps听众:获得的地点年龄:   17306毫秒。超过10000毫秒的最大值。   忽略。

     

06-04 15:42:03.602:D / WL gps监听器:状态   提供者gps已更改

     

06-04 15:42:03.602:D / WL gps听众:gps是   TEMPORARILY_UNAVAILABLE

     

06-04 15:43:03.509:D / CordovaLog(3962):   file:///android_asset/www/default/worklight/worklight.js:第12769行:   未捕获的ReferenceError:未定义PositionError

     

06-04 15:43:03.509:E / Web Console(3962):未捕获的ReferenceError:   PositionError未定义于   文件:///android_asset/www/default/worklight/worklight.js:12769

     

06-04 15:43:04.040:D / CordovaActivity(3962):暂停了应用程序!

总结一下,应用程序最初获取我的GPS坐标,但随后立即抛出“gps是TEMPORARILY_UNAVAILEABLE”,并重复该过程。也许我的手机无法处理实时跟踪?虽然实时跟踪可在我的设备上使用Google地图。

1 个答案:

答案 0 :(得分:0)

  

file:///android_asset/www/default/worklight/worklight.js:12769行:   未捕获的ReferenceError:未定义PositionError

此问题已在Worklight的更高版本中得到解决;如果可能,我建议您将Studio安装升级到最新的v6.2.0.01版本甚至v6.3。

如果您在v6.1中需要它,请尝试从IBM Fix Central升级到最新的iFix for 6.1.0.1。