【问题标题】:Phonegap Android Geolocation watchPosition timeoutPhonegap Android Geolocation watchPosition 超时
【发布时间】:2013-10-22 15:00:53
【问题描述】:

我正在使用 Cordova 3.0.0,A Samsung Galaxy S3 4.1.2 进行测试。

当我测试 Phonegap 观看位置的完整示例时:http://docs.phonegap.com/en/edge/cordova_geolocation_geolocation.md.html#geolocation.watchPosition

我得到一个带坐标的第一行,然后我得到了错误:

code 3
message : Position retrieval timed out.

并且没有返回其他位置。我的 iphone 上的相同代码正在运行。 我在走路时测试,在车里也是一样。

我注意到,当我在安卓设备上使用谷歌地图时,顶部栏会弹出一个 GPS 图标。 当我启动我的应用程序时,它不在这里。

清单已正确设置权限,我的选择是:

var options = { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true };
watchID = navigator.geolocation.watchPosition( onSuccess, onError, options );

我的应用需要精确度才能运行...

感谢您的帮助。

【问题讨论】:

    标签: javascript android cordova phonegap-plugins


    【解决方案1】:

    好的,经过数小时的测试,我设法使 watchPosition 在带有 Cordova 3.1.0 的 Android 上运行。

    你必须做的:使用 html5 only api 进行地理定位,不要包括这个:http://cordova.apache.org/docs/en/3.1.0/cordova_geolocation_geolocation.md.html#Geolocation

    如果您的项目中已经有它,请通过 CLI 将其删除: 科尔多瓦插件 rm org.apache.cordova.geolocation

    当然,将这些行保留在您的 android 清单中:

    < uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    < uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    < uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    

    这对我有用,所以告诉我它是否对你有用。如果您需要,我将发布代码(但例如,cordova 完整示例有效)

    【讨论】:

    • 删除插件解决了这个问题。我的应用程序似乎仍然有点不稳定,我仍然经常超时,但这可能是由同时在后台发生的 AJAX 调用引起的。不过谢谢!
    • 在 Cordova 3.1 iOS7 中遇到了这个问题,这也解决了这个问题
    • @arlg 是的,这解决了我在使用 Cordova 3.1.0 的 Android 上的问题。很好的发现。
    • 嗨@arlg - 对此很新,请你确认我已经完成了这个ok...添加xmlns:android = "http://schemas.android.com/apk/res/android"到config.xml widget并在应用程序根目录中创建了一个AndroidManifest.xml这三个&lt;uses-permission&gt; 行。我正在测试的应用程序是我使用 phonegap 构建上传功能上传的。如何删除 corova 地理位置?
    • 这里是官方参考你说的markmail.org/message/…
    【解决方案2】:

    也许这可以帮助你:

    我刚刚在 Cordova/PhoneGap 中发现了一个大问题: - 当您打开由 cordova 构建的 Android 项目(在命令行中)时,requestUpdate 设置为..... 60 秒 !!!!!!!!! !!您每分钟都有一个新位置!即使您使用 GPS (enableHighAccuracy="true")。因此,尝试将其设置为 1000,您可以在 org.apache.cordova.geolocation 包中找到 LocationManager.GPS_PROVIDER -> GPSListener 类!

    【讨论】:

    • 这是真的。我每60秒就有一个位置!超时和maximumAge都没有关系
    • 所以你已经用 Eclipse 打开了 android 项目?
    • 不,我正在使用cordova-cli,但这是同样的问题。我发现这个markmail.org/message/… 开发人员说你不应该再使用地理定位插件了。
    • 天哪。感谢您的链接。当我认为我的老板想用 cordova 创建一个运动追踪应用程序时......
    • 也感谢您的链接。希望他们会重写所有的地理定位插件。
    【解决方案3】:

    是的,你是对的,Phonegap v3.x 中的地理定位似乎存在问题 - 我安装了 3.1.0-0.15.0。我看到了同样的情况:一个正确的位置,然后是一个超时错误,触发了观察者的清除/重新添加,然后是一个正确的位置。在 Phonegap 2.9.0 上运行相同的测试应用程序,它工作正常,成功检索位置。这次我使用了选项{ maximumAge: 0, timeout: 30000, enableHighAccuracy: true };

    看看你是否得到相同的结果:here's the v3.1.0 project&APKhere's the v2.9.0 project&APK

    这是我使用 Phonegap 3.1.0 构建时的 logcat:

    10-24 20:50:29.287: I/Web Console(17092): Device Ready at :1171167449
    10-24 20:50:59.287: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out. at :1171167509
    10-24 20:51:29.328: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out. at :1171167509
    10-24 20:51:59.337: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out. at :1171167445
    10-24 20:52:28.397: I/Web Console(17092): Position updated: latitude=50.64626501666667, longitude=-4.736916616666666, accuracy=17m at :-1468095491
    10-24 20:52:28.397: I/Web Console(17092): Position updated: latitude=50.64626501666667, longitude=-4.736916616666666, accuracy=17m at :-1468095491
    10-24 20:52:58.407: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out. at :1171167445
    10-24 20:53:27.878: I/Web Console(17092): Position updated: latitude=50.646433849999994, longitude=-4.736890766666666, accuracy=8m at :-1468095491
    10-24 20:53:27.878: I/Web Console(17092): Position updated: latitude=50.646433849999994, longitude=-4.736890766666666, accuracy=8m at :-1468095491
    10-24 20:53:57.887: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out. at :1171167445
    10-24 20:54:27.367: I/Web Console(17092): Position updated: latitude=50.64643435, longitude=-4.736896850000001, accuracy=9m at :-1468095491
    10-24 20:54:27.367: I/Web Console(17092): Position updated: latitude=50.64643435, longitude=-4.736896850000001, accuracy=9m at :-1468095491
    10-24 20:54:57.377: I/Web Console(17092): Error while retrieving current position. Error code: 3,Message: Position retrieval timed out. at :1171167445
    

    这是我使用 Phonegap v2.9.0 构建时来自完全相同的应用程序的 logcat:

    10-24 21:10:19.698: I/Web Console(19755): Device Ready at :1172318425
    10-24 21:10:22.487: I/Web Console(19755): Position update rejected because accuracy of45m is less than required 20m at :1172318349
    10-24 21:10:54.697: I/Web Console(19755): Position updated: latitude=50.646209633333335, longitude=-4.737049566666667, accuracy=9m at :1172318421
    10-24 21:10:55.177: I/Web Console(19755): Position updated: latitude=50.64623646666667, longitude=-4.7369963, accuracy=9m at :1172318421
    10-24 21:10:56.177: I/Web Console(19755): Position updated: latitude=50.64623674999999, longitude=-4.736949983333333, accuracy=9m at :1172318357
    10-24 21:10:57.677: I/Web Console(19755): Position updated: latitude=50.646237033333335, longitude=-4.73695015, accuracy=9m at :1172318357
    10-24 21:10:58.677: I/Web Console(19755): Position updated: latitude=50.646238333333336, longitude=-4.736944716666667, accuracy=9m at :1172318357
    10-24 21:10:59.747: I/Web Console(19755): Position updated: latitude=50.6462348, longitude=-4.736952216666666, accuracy=9m at :1172318357
    10-24 21:11:00.667: I/Web Console(19755): Position updated: latitude=50.64623206666667, longitude=-4.73695695, accuracy=9m at :1172318357
    10-24 21:11:01.677: I/Web Console(19755): Position updated: latitude=50.646232700000006, longitude=-4.7369544999999995, accuracy=9m at :1172318357
    10-24 21:11:02.677: I/Web Console(19755): Position updated: latitude=50.646232700000006, longitude=-4.7369544999999995, accuracy=12m at :1172318357
    10-24 21:11:03.687: I/Web Console(19755): Position updated: latitude=50.64623241666666, longitude=-4.736952116666667, accuracy=12m at :1172318357
    10-24 21:11:04.207: I/Web Console(19755): Position updated: latitude=50.646240533333334, longitude=-4.736951266666667, accuracy=12m at :1172318357
    10-24 21:11:05.187: I/Web Console(19755): Position updated: latitude=50.646235399999995, longitude=-4.736953183333334, accuracy=12m at :1172318357
    10-24 21:11:06.197: I/Web Console(19755): Position updated: latitude=50.6462522, longitude=-4.736926933333334, accuracy=12m at :1172318357
    10-24 21:11:07.197: I/Web Console(19755): Position updated: latitude=50.646253949999995, longitude=-4.736931416666667, accuracy=12m at :1172318357
    10-24 21:11:07.517: I/Web Console(19755): Position update rejected because accuracy of45m is less than required 20m at :1172318357
    10-24 21:11:08.197: I/Web Console(19755): Position updated: latitude=50.64624196666667, longitude=-4.736951366666666, accuracy=9m at :1172318357
    10-24 21:11:09.697: I/Web Console(19755): Position updated: latitude=50.646261833333334, longitude=-4.73694825, accuracy=9m at :1172318357
    10-24 21:11:10.697: I/Web Console(19755): Position updated: latitude=50.64627816666666, longitude=-4.736968816666666, accuracy=9m at :1172318357
    10-24 21:11:11.197: I/Web Console(19755): Position updated: latitude=50.64627698333334, longitude=-4.736982066666667, accuracy=9m at :1172318357
    10-24 21:11:12.197: I/Web Console(19755): Position updated: latitude=50.646291033333334, longitude=-4.736992866666667, accuracy=9m at :1172318357
    10-24 21:11:13.197: I/Web Console(19755): Position updated: latitude=50.646285549999995, longitude=-4.73696835, accuracy=9m at :1172318357
    10-24 21:11:14.197: I/Web Console(19755): Position updated: latitude=50.64628801666666, longitude=-4.736988766666667, accuracy=9m at :1172318357
    10-24 21:11:15.197: I/Web Console(19755): Position updated: latitude=50.646256433333335, longitude=-4.736974683333333, accuracy=9m at :1172318357
    10-24 21:11:16.197: I/Web Console(19755): Position updated: latitude=50.64623895, longitude=-4.736980716666666, accuracy=9m at :1172318357
    10-24 21:11:17.207: I/Web Console(19755): Position updated: latitude=50.646249616666665, longitude=-4.736948533333333, accuracy=9m at :1172318357
    10-24 21:11:18.207: I/Web Console(19755): Position updated: latitude=50.64624111666667, longitude=-4.7369412833333335, accuracy=9m at :1172318357
    10-24 21:11:19.217: I/Web Console(19755): Position updated: latitude=50.64624506666667, longitude=-4.7369719, accuracy=9m at :1172318357
    10-24 21:11:20.207: I/Web Console(19755): Position updated: latitude=50.646218950000005, longitude=-4.7369769999999995, accuracy=9m at :1172318357
    10-24 21:11:21.207: I/Web Console(19755): Position updated: latitude=50.64621395000001, longitude=-4.7369834, accuracy=9m at :1172318357
    10-24 21:11:22.207: I/Web Console(19755): Position updated: latitude=50.646217416666666, longitude=-4.736986783333333, accuracy=12m at :1172318357
    10-24 21:11:23.207: I/Web Console(19755): Position updated: latitude=50.646211816666664, longitude=-4.7369768500000005, accuracy=12m at :1172318357
    10-24 21:11:24.707: I/Web Console(19755): Position updated: latitude=50.646210450000005, longitude=-4.736994233333333, accuracy=12m at :1172318357
    10-24 21:11:25.707: I/Web Console(19755): Position updated: latitude=50.64621571666667, longitude=-4.736988583333333, accuracy=12m at :1172318357
    10-24 21:11:26.707: I/Web Console(19755): Position updated: latitude=50.646216466666665, longitude=-4.7370037, accuracy=12m at :1172318357
    10-24 21:11:27.707: I/Web Console(19755): Position updated: latitude=50.64621723333333, longitude=-4.737019266666667, accuracy=20m at :1172318357
    10-24 21:11:28.717: I/Web Console(19755): Position updated: latitude=50.64621738333334, longitude=-4.737011333333333, accuracy=12m at :1172318357
    10-24 21:11:29.717: I/Web Console(19755): Position updated: latitude=50.64621768333333, longitude=-4.7370187, accuracy=18m at :1172318357
    10-24 21:11:30.727: I/Web Console(19755): Position updated: latitude=50.64621798333333, longitude=-4.737026116666667, accuracy=18m at :1172318357
    

    【讨论】:

    • 感谢帮助准确和重置手表,但我还有一个第一个好的位置,然后图标消失,位置没有更新。
    • 感谢代码。当我在我的设备上测试时,我得到相同的错误代码 3:超时而没有获得任何 gps 位置。即使有 30000 毫秒,我仍然会遇到超时错误。我设法让它在我的应用程序上运行,当我遇到错误时,我使用了你的技巧来重新启动观察器。所以发生的事情是: 1- 观察者启动。 2-找到一个位置,我得到了gps位置。 3- 抛出错误:代码 3 超时。 4- 正如你告诉我的,我清除了观察者,然后再次启动它 - 在第 1 步重新启动...这是有效的,但行为很奇怪。
    • 我注意到,当我启动我的应用程序,然后在其上启动谷歌地图时,谷歌地图的 gps 图标不闪烁,并且当我移动时我的位置更新得非常快。 logcat 告诉我,我的后台应用程序正在接收 gps 位置,因为谷歌地图使用它!这太疯狂了。
    • 你说得对,我看到 3.1.0 的行为完全相同,但 2.9.0 却没有
    • 您最终找到解决方案了吗?我遇到了完全相同的问题。
    【解决方案4】:

    我确实解决了将这一行添加到清单的问题:

    <uses-permission android:name="android.permission.INTERNET" />
    

    默认情况下,CLI 命令不会将此行添加到清单中。

    您必须授予应用权限才能使用 wifi 和手机天线获取位置

    我正在使用这条线进行测试,但没有区别:

    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    

    我已经更改了在 app/src/org.apache.cordova.geolocation 中的 GPSListener.java 文件中获取新位置的时间:

    this.locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 0, this);
    

    我确实把60000换成了2000,但是没有区别。

    我的设备是安卓 4.3 的 i9300

    我希望这个信息可以帮助别人!

    您好!

    【讨论】:

      【解决方案5】:

      首先确保您的代码没有错误! 如果您确定,那么您还需要做一件事! 只需更改您的 Android 设备的安全设置。 转到设置 -> 安全 -> 选中“未知来源”复选框 为了让您的 apk 能够顺利运行。

      希望它对我有用!

      【讨论】:

        猜你喜欢
        • 2019-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-20
        • 2017-02-03
        相关资源
        最近更新 更多