【问题标题】:Worklight 6.1 Location Services Sample works in simulator, but not actual phoneWorklight 6.1 Location Services Sample 在模拟器中工作,但不是实际的手机
【发布时间】:2014-07-22 21:56:38
【问题描述】:

我无法在我的 Droid 4 手机上使用 Worklight“定位服务”“SmallSample”应用程序。我使用的是 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,然后使用新的 Keystore 导出签名的 APK,并将其安装到我的手机上。
  • 使用该应用程序时我在外面,以确保我能获得 GPS 信号。
  • 其他 GPS 应用程序可在我的手机上运行(Google 地图)。
  • 我通过使用移动浏览器打开 Worklight 控制台验证了与 Worklight Server 的连接。
  • 在应用程序的 Worklight 设置中,我验证了应用程序对我的 Worklight 服务器使用了正确的 IP 地址、端口和上下文根。
  • 我验证了所有默认权限,包括:
<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 坐标在 Small Sample 中不断更新。我粘贴了下面代码的主要部分。

    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(debug) 得到的错误:

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

06-04 15:42:03.602:D/WL gps 侦听器:该位置已 更新了!

06-04 15:42:03.602:D/WL gps 侦听器:获取位置年龄: 17306 毫秒。超过maximumAge 10000 毫秒。 忽略。

06-04 15:42:03.602: D/WL gps Listener: 的状态 提供者 GPS 已更改

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

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

06-04 15:43:03.509:E/Web 控制台 (3962):未捕获的 ReferenceError: PositionError 未定义在 file:///android_asset/www/default/worklight/worklight.js:12769

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

总而言之,应用程序最初获取我的 GPS 坐标,但随后立即抛出“gps is TEMPORARILY_UNAVAILEABLE”,并且该过程重复。也许我的手机无法处理实时跟踪?虽然实时跟踪在我设备上的 Google 地图中有效。

【问题讨论】:

  • 你在安卓模拟器中测试过,看看它是否在那里工作?您可以在那里动态更改 GPS 坐标以确保其正常工作。这将有助于缩小问题是在设备上还是在 Android 上。这个问题解释了如何在模拟器中更改 GPS 坐标:stackoverflow.com/questions/2279647/…
  • LogCat 日志会有所帮助。
  • 谢谢丹尼尔。我验证了该应用程序确实可以在模拟器中运行,所以问题出在它在我的 Droid 4 物理设备上运行时。根据 Idan 的建议,我接下来会调查 LogCat 日志。
  • 我想确认您使用的是最新可用版本的 Worklight - 您可以从 eclipse 市场重新下载开发者版本,并检查问题是否仍然存在(删除本机文件夹并之后重新构建)。正如上面在日志中看到的,PositionError 存在一些问题。
  • 我使用的是 build: 6.1.0.01-20140427-1450,然后我升级到了 6.1.0.01-20140518-1532。不幸的是,自从 1532 升级以来,现在地理定位不再在 Mobile Browser Simulator 或 Android Emulator 中工作。我想我要再等几天才能发布 6.2。感谢您的帮助!

标签: gps geolocation ibm-mobilefirst


【解决方案1】:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多