【问题标题】:geolocation.watchposition not working with network based location offgeolocation.watchposition 不使用基于网络的位置关闭
【发布时间】: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


【解决方案1】:

根据我对 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" />

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2015-09-26
    • 2015-04-15
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多