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

sma*_*ues 6 html5 gps android geolocation cordova

我正在使用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!
    }
});
Run Code Online (Sandbox Code Playgroud)

和phonegap路径:

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

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

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

我在Sony Tablet S上测试

我知道这个错误: 如何在Sencha中通过GPS获取用户位置 但是我检查了代码并且它在sencha 2.3.1中被定义为固定

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

TIA.

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

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

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

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

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

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

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

And*_*cia 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" />
Run Code Online (Sandbox Code Playgroud)

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