Phonegap/Cordova Geolocation 不适用于 Android 4.0+,但适用于所有其他平台
Posted
技术标签:
【中文标题】Phonegap/Cordova Geolocation 不适用于 Android 4.0+,但适用于所有其他平台【英文标题】:Phonegap/Cordova Geolocation Not working on Android 4.0+ but Working on all other platforms 【发布时间】:2014-07-12 20:25:06 【问题描述】:我正在使用 Phonegap 3.30 版和 Sencha Touch 提供的 Phonegap 构建和 UI 元素。该应用程序的第一页包含一张地图,地图是使用开放的街道地图和使用 sencha 触摸库 https://market.sencha.com/extensions/ext-ux-leafletmap 的传单呈现的。
如果我将地图设置为不使用在地图上显示您的位置的地理位置选项,则地图在所有平台上都能完美呈现,但是当我启用设置以使用地理位置时,地图会完美呈现并覆盖当前位置所有平台(ios、android 2.0),但不是 Android 4.0+。
事实上,在 Android 上,地图根本不会呈现,这与它过去使用错误权限时的行为类似。我已通过 Config.xml Phonegap 地理定位插件将应用程序设置为使用 3 个位置权限。这是 Config.xml 的链接https://www.dropbox.com/s/c1im3twg21mnxi6/config.xml
总结一下: 仅启用地理定位的 Android 4.0 会阻止地图呈现,但地图和地理定位适用于所有其他平台。
有人知道是什么原因造成的吗?我没有任何错误被打印到控制台,而且权限是正确的,因为它适用于 Android 2.0,我完全被难住了。
下面的一些图片展示了这个问题,请注意,当应用程序在网络浏览器上运行时,地理定位也可以工作。
启用地理定位后,Android 无法加载
iOS 使用地理位置正确加载
【问题讨论】:
这里还有一个例子,Android 2.0、4.1 可以正常工作,但 4.4 不能。 dropbox.com/s/q4mn2tt3kq2g077/… 【参考方案1】:我已经解决了这个问题,这个问题发生在 Android 4.2、4.3 和 4.4 上。
您必须在对 Ext.util.geolocation 的调用中明确启用以下选项。允许高精度和频率。这是一个非常令人头疼的问题@Sencha,请让这个简单。
var geo = Ext.create('Ext.util.Geolocation',
autoUpdate: false,
allowHighAccuracy: true,
frequency: '3000',
listeners:
locationupdate: function(geo)
var currentLat = geo.getLatitude();
var currentLng = geo.getLongitude();
var altitude = geo.getAltitude();
var speed = geo.getSpeed();
var heading= geo.getHeading();
// Ext.Msg.alert('纬度经度' + currentLat + currentLng); , 位置错误:函数(地理,bTimeout,bPermissionDenied,bLocationUnavailable,消息) 如果(b超时) // Ext.Msg.alert('发生超时',"无法获取当前位置"); 别的 // alert('发生错误。'); ); geo.updateLocation();
【讨论】:
以上是关于Phonegap/Cordova Geolocation 不适用于 Android 4.0+,但适用于所有其他平台的主要内容,如果未能解决你的问题,请参考以下文章
基于 Swift 项目的 PhoneGap/Cordova App
桌面/移动标准网页中的phonegap / cordova社交共享插件