我正在使用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应用程序中它是无用的。
至少这是我的设备上发生的事情(索尼平板电脑)
答案 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" />
我猜测从设备设置撤消对粗略位置的访问会以某种方式“覆盖”安装应用程序时给出的用户权限。