我在 Geolocation Cordova 插件 (org.apache.cordova.geolocation) 上遇到了很多问题.它在 iOS 上运行良好,但在 Android 上根本不行.
I've had quite some issues with the Geolocation Cordova plugin (org.apache.cordova.geolocation). It works fine on iOS, but it doesn't at all on Android.
据我了解,该插件曾经包含原生 Android 代码,但在某些时候被删除了,因为它太错误/太慢了,而且原生 Web HTML5 实现更加稳定和快速.
As I understand, the plugin used to include native Android code, but this was removed at some point, because it was too buggy/slow and the native web HTML5 implementation was much more stable and fast.
如果我使用仍然具有本机代码的最新插件版本 (0.3.2),它确实可以工作(但速度很慢,实际上并非总是如此).但是当它返回时,位置对象总是被填充.
If I use the latest plugin version (0.3.2) which still has the native code, it does work (but slow and indeed, not always). But when it does return, the position object is always populated.
如果我使用最新的插件版本 (1.0.1),getCurrentPosition() 会立即返回一个空对象 ({}).它不会抛出错误.
If I use the latest plugin version (1.0.1), the getCurrentPosition() immediately returns with an empty object ({}). It does not throw an error.
如果我完全删除插件,并手动将权限添加到 Android 项目:
If I remove the plugin completely, and add the permissions manually to the Android project:
<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 控制台中不会显示任何错误.有什么想法吗?
The same thing happens. I just can't get it to work, but it doesn't make sense. No errors are displayed in the Android console. Any thoughts?
好的,调试了好久,发现问题了.显然,getCurrentPosition() 函数在 Android 中返回一个特殊"对象,当使用 JSON.stringify() 时,它的计算结果为 {}.如果我将原始返回对象输出到控制台,结果证明它根本不是空的.
OK, after a long long time of debugging, I found the problem. Apparently, the getCurrentPosition() function returns a 'special' object in Android, which evaluates to {} when using JSON.stringify(). If I outputted the raw return object to the console, it turned out it wasn't empty at all.
因此,在荒谬的调整之后修复了我的代码:
So, following ridiculous adjustments fixed my code:
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 应用程序,所以我总是应用上述内容.
iOS works fine without above adjustments, but as my app is a Phonegap application, I always apply the above.
这篇关于Cordova Geolocation 插件在 Android 上返回空位置对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!