我正在使用 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 });
结果是一样的,我试着等待几分钟让地理锁定发生,但没有位置服务的迹象。
phonegap 定位插件已安装,权限正确,如果启用网络定位,一切正常。
我正在 Sony 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 应用程序中就毫无用处了。
至少这是我的设备(索尼平板电脑)上发生的事情
最佳答案
根据我对 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" />
我猜测从设备设置中撤销对粗略位置的访问会以某种方式“覆盖”安装应用程序时给予的用户权限。
关于android - geolocation.watchposition 不适用于基于网络的位置关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20874674/