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