仅限Android 4.0设备上的Phonegap getCurrentPosition超时

时间:2013-12-04 17:00:46

标签: javascript android cordova

我开发了一款现已在Google Play商店上线的应用。该应用使用getCurrentPosition方法获取用户的当前位置。

我已经在一些设备上进行了测试,代码运行良好。这些设备是Nexus 4,Nexus 5,三星Galaxy S3和S4。完美。

我现在发现Android设备上的应用程序问题低于4.1(即4.0.4,这似乎是除了上面提到的最常用的版本)。

应用程序不断返回超时错误。我知道设备上的位置服务已经开启。

我修改了getCurrentPosition的选项,其中包括maximumAgetimeoutenableHighAccuracy。我尝试了各种各样的选择;从合理的超时/年龄,低超时/年龄到高超时/年龄。我尝试在所有排列中打开enableHighAccuracytrue)和关闭(false)。正在考虑超时(例如,在达到超时之前没有命中错误回调)。

StackOverflow上有一些类似的线程,但没有一个符合我的问题。我尝试关闭设备,删除并重新添加应用程序,并重新编译了几次。同样的问题。

正在测试的设备是HTC Sensation,但我也试过HTC Wildfire,并且有类似的错误报告来自用户外面 - 都是一样的。

下面是示例代码,但就像我说的那样,我尝试了各种选项(年龄超过超时,超时时间超过年龄,两种情况下开启和关闭的准确度都很高)。

if (navigator.geolocation) navigator.geolocation.getCurrentPosition(function(pos) {
        console.log('Working...');
    }, function(error, msg) {
        console.log(error.code + ' - '+ error.message);
    },
    { maximumAge: 90000, timeout: 9000, enableHighAccuracy: false });

LogCat吐出:3 - Position retrieval timed out. at file:///[...]

更新:更改为watchPosition无效,设备仍无法找到该位置。

2 个答案:

答案 0 :(得分:1)

这是设备的问题,而不是Android(可能)或Phonegap(当然)的问题。基于位置的服务无法在默认的Android浏览器上运行,也无法使用本机浏览器(地图应用程序可以正常工作)。

我通过关闭位置服务,重启设备并重新启动所有位置服务,强制重新接受条款/证书等来修复此问题。定位服务随后涌入生活,浏览器找到了我的位置,应用程序正常工作。

发现有几个人在网上抱怨这个,我在不止一个运行相同Android版本的设备上遇到过它。

答案 1 :(得分:0)

对我来说,地理定位插件由于某种原因没有成功安装。运行printf( "$%.2f", overpayed ); 以确保cordova-plugin-geolocation存在。如果没有,请运行cordova plugins list。有时删除和重新添加插件或整个平台也会修复错误。