geolocation.watchposition不能与基于网络的位置关闭

时间:2014-01-02 00:19:54

标签: android html5 cordova geolocation gps

我正在使用sencha 2.3.1 + phonegap 3.3.0为Android构建位置感知应用程序,并使用地理位置显示靠近用户位置排序的目的地列表。 如果基于网络的位置设置打开,一切正常。但是,如果我将其关闭并仅保留基于gps的位置,则它永远不会被检测到。 代码非常基本,我尝试了两个sencha路径:

Ext.device.Geolocation.watchPosition({
    frequency: 10000, 
    callback: function(position) {
      AppHelper.setCurrentLocation(position);//yeah!!

    },
    failure: function() {
        AppHelper.setLocationModeOff();//oouch!
    }
});

和phonegap路径:

var success = function(position) {
        AppHelper.setCurrentLocation(position);
    };
 var fail = function() {
            AppHelper.setLocationModeOff();
    };
   navigator.geolocation.watchPosition(success, fail,{ timeout: 30000 });

结果是一样的,我试着等待几分钟让geolock发生但没有位置服务的迹象。

安装了phonegap位置插件,权限正确,如果启用了网络位置,一切正常。

我正在索尼Tablet S上进行测试。

我知道这个错误: How to get user position by GPS in Sencha 但我检查了代码,并在sencha 2.3.1

中定义了它

我会试试其他设备,但我想知道是否有人经历过同样的事情。

TIA。

编辑: 我使用系统默认浏览器(基于webkit)在我的Android设备上使用标准html5代码进行了实验。 我会访问我的设置页面并在每次运行时更改设置。

访问http://html5demos.com/geo我得到以下内容:

我启动了设备,网络地理位置打开,基于gps的位置关闭: 我收到一条消息,询问我是否想要分享我的位置我说是,只有这一次一切正常。

关闭基于网络的地理定位,gps仍然关闭: 位置检测失败。 (正如预期的那样)

开启GPS,关闭网络地理位置: 地理定位无声地失败,我没有得到使用我的位置和随后激活基于GPS的凝胶定位的请求。

所以我的结论是:这与我在phonegap中注意到的相似。如果基于网络的地理定位,一切都按预期工作。但是,如果我没有网络连接并且gps已启用,那么在我的html5应用程序中它是无用的。

至少这是我的设备上发生的事情(索尼平板电脑)

1 个答案:

答案 0 :(得分:0)

根据我对HTML5地理定位API的理解,这是预期的行为,你无法控制它是否在使用gps或网络位置。

可能发生的是watchPosition(),当它被调用时,首先尝试使用网络进行原始,快速定位,然后使用gps定位来获得更好的结果(假设您使用enableHighAccuracy参数调用它) )。

如果您正在禁用网络定位,它可能会在第一点陷入困境:如cordova / phonegap的文档中所述,访问粗略位置的权限是地理定位工作的必要条件。

(in app/AndroidManifest.xml)

     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

我猜测从设备设置撤消对粗略位置的访问会以某种方式“覆盖”安装应用程序时给出的用户权限。