Cordova Geolocation plugin returning empty position object on Android(Cordova Geolocation 插件在 Android 上返回空位置对象)
问题描述
我在 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 上返回空位置对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Cordova Geolocation 插件在 Android 上返回空位置对象
基础教程推荐
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01