【发布时间】:2014-01-19 09:54:05
【问题描述】:
我正在使用 sencha 2.3.1 + phonegap 3.3.0 为 Android 构建一个位置感知应用程序,并使用地理定位来显示按与用户位置的接近程度排序的目的地列表。 如果基于网络的位置设置打开,则一切正常。但是,如果我将其关闭并仅保留基于 gps 的位置,则它永远不会被检测到。 代码很基础,煎茶路径我都试过了:
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 应用程序中就毫无用处了。
至少这是在我的设备(索尼平板电脑)上发生的情况
【问题讨论】:
-
多台设备出现同样问题...
-
你安装了phonegap geolocaion插件吗?如果你没有,那么你正在使用浏览器的 html5 地理定位 api,也许它可以解释这种行为?
-
在他的问题中,他说他拥有地理定位插件和相关权限。我想知道的是,当用户授予 access_to_coarse_location 安装应用程序的权限,然后通过设备设置禁用它时会发生什么。我猜想禁用会以某种方式覆盖在安装时授予应用程序的权限。
-
我希望禁用会覆盖权限。我的解释是:应用程序级别的权限系统授予对电话功能的访问权限,除非该功能在电话的常规设置级别被禁用。没关系。我的问题是 sencha 和 phonegap 似乎都不擅长在应用程序打开时检测常规设置的变化,并且回退到仅 GPS(没有基于网络的检测)似乎不起作用。
-
android 和 ios 都有本地位置管理器,可让您设置“重大位置变化”监控(例如,如果用户移动 100 米,通知您的应用程序)。我有一个公开这些原生 API 的 Phonegap 插件。你会对此感兴趣吗?
标签: android html cordova geolocation gps