【发布时间】: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