我在使用 Geolocation Cordova 插件 (org.apache.cordova.geolocation) 时遇到了一些问题。它在 iOS 上运行良好,但在 Android 上则完全不行。
据我了解,该插件曾经包含本机 Android 代码,但在某些时候被删除,因为它有太多错误/速度太慢,而且本机 Web HTML5 实现更加稳定和快速。
如果我使用仍然具有本机代码的最新插件版本(0.3.2),它确实可以工作(但速度很慢,而且实际上并不总是如此)。但是当它返回时,位置对象总是被填充。
如果我使用最新的插件版本 (1.0.1),getCurrentPosition() 会立即返回一个空对象 ({})。它不会抛出错误。
如果我完全删除插件,然后手动将权限添加到Android项目中:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
同样的事情也会发生。我只是无法让它发挥作用,但这没有意义。 Android 控制台中不显示任何错误。有什么想法吗?
好吧,经过很长一段时间的调试,我发现了问题所在。显然,getCurrentPosition() 函数在 Android 中返回一个“特殊”对象,当使用 JSON.stringify() 时,该对象的计算结果为 {}。如果我将原始返回对象输出到控制台,结果发现它根本不是空的。
所以,下面荒谬的调整修复了我的代码:
navigator.geolocation.getCurrentPosition(function (position) {
var positionObject = {};
if ('coords' in position) {
positionObject.coords = {};
if ('latitude' in position.coords) {
positionObject.coords.latitude = position.coords.latitude;
}
if ('longitude' in position.coords) {
positionObject.coords.longitude = position.coords.longitude;
}
if ('accuracy' in position.coords) {
positionObject.coords.accuracy = position.coords.accuracy;
}
if ('altitude' in position.coords) {
positionObject.coords.altitude = position.coords.altitude;
}
if ('altitudeAccuracy' in position.coords) {
positionObject.coords.altitudeAccuracy = position.coords.altitudeAccuracy;
}
if ('heading' in position.coords) {
positionObject.coords.heading = position.coords.heading;
}
if ('speed' in position.coords) {
positionObject.coords.speed = position.coords.speed;
}
}
if ('timestamp' in position) {
positionObject.timestamp = position.timestamp;
}
// Use the positionObject instead of the position 'object'
alert(JSON.stringify(positionObject));
}
iOS 无需进行上述调整即可正常工作,但由于我的应用程序是 Phonegap 应用程序,因此我始终应用上述调整。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)