我在Geolocation Cordova插件(org.apache.cordova.geolocation)上遇到了一些问题.它在iOS上运行良好,但在 Android上根本没有. 据我了解,该插件曾经包含原生的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应用程序,我总是应用上述.