Phonegap / Cordova Geolocation不适用于Android 4.0+但适用于所有其他平台

时间:2014-07-12 20:25:06

标签: android cordova geolocation sencha-touch-2

我正在使用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 geolocation插件使用3位置权限。以下是Config.xml https://www.dropbox.com/s/c1im3twg21mnxi6/config.xml

的链接

总结一下: 只有启用了Geolocation的Android 4.0才能防止地图呈现,但地图和地理定位适用于所有其他平台。

有谁知道造成这种情况的原因是什么?我没有错误打印到控制台,只要我可以权限是正确的,因为它适用于Android 2.0我完全被难倒。

下面的一些图片说明了这个问题,请注意,当应用程序在网络浏览器上运行时,Geolocation也可以使用。

未启用地理定位的Android未加载 Android Not Loading with Geolocation Enalbed

iOS正确加载Geolocation iOS Loading Correctly with Geolocation

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,这个问题发生在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('Latitude Longitude'+ currentLat + currentLng);                 },                 locationerror:function(geo,bTimeout,bPermissionDenied,bLocationUnavailable,message){                     if(bTimeout){                         // Ext.Msg.alert('超时发生','无法获得当前位置“);                     }                     其他{                         // alert('发生错误。');                     }                 }             }             });         geo.updateLocation();