gpt4 book ai didi

android - Phonegap 地理定位有时无法在 Android 上运行

转载 作者:可可西里 更新时间:2023-11-01 18:46:05 27 4
gpt4 key购买 nike

我已经使用 cordova v3.4.1 构建了 android 和 ios 应用程序,在 ios 上,地理定位功能返回得非常快并且始终运行良好,但在 android 上,有时它不起作用。

奇怪的是,在我重新启动我的 android 手机后,它工作正常。在几个多小时内,地理定位在 wifi 和 3G 中都非常迅速地定位。

但几个小时后,我再次打开应用程序,地理定位无法工作。有时当我在外面时,它可以用gps卫星定位,但很慢,经常出现超时错误。

我尝试删除应用程序并重新安装它,但问题仍然存在,除非重新启动我的 android 手机。当我重新启动我的 android 手机时,地理定位功能在未来几个小时再次正常工作。

我测试了一些安卓手机,比如samsang note2,galaxy4等,他们都有同样的问题。当我重新启动它时,他们可以非常快速地定位。

这个问题困扰我好久了,有大佬帮帮我吗?

下面是我的代码:

navigator.geolocation.getCurrentPosition(function(pos){
cb(null,pos)
},function(errMsg){
navigator.geolocation.getCurrentPosition(function(pos){
cb(null,pos)
},function(errMsg){
cb(errMsg)
}, {
enableHighAccuracy: true,
timeout: 60*1000*2,
maximumAge: 1000*60*10
});
}, {
enableHighAccuracy: false,
timeout: 10*1000,
maximumAge: 1000*60*10
});

我的配置文件:

<feature name="Geolocation">
<param name="android-package" value="org.apache.cordova.geolocation.GeoBroker" />
</feature>

最佳答案

我终于解决了这个问题,现在在我的安卓手机上,getCurrentPosition 函数每次都非常快速地返回位置信息,我再也不需要重启手机了!我不确定 cordova v3.4.1 的地理定位插件是否有错误。

出现这个问题的原因是我们总是使用浏览器的navigator.geolocation.getCurrentPosition函数来定位位置,所以我们必须让应用程序使用cordova原生实现而不是html5。

这是cordova v3.4.1的解决方案,希望对你有帮助,事实上它已经解决了我的问题。

求解步骤:

1.删除 org.apache.cordova.geolocation

$ cordova plugin rm org.apache.cordova.geolocation

2.重新安装一个新的org.apache.cordova.geolocation插件

$ cordova plugin add org.apache.cordova.geolocation

3.复制插件到e:\

进入插件文件夹,例如‘YOUR_APP_FOLDER\plugins\’

将孔 org.apache.cordova.geolocation 复制到 E:\org.apache.cordova.geolocation

4.再次移除插件

$ cordova plugin rm org.apache.cordova.geolocation

5.编辑E:\org.apache.cordova.geolocation\plugin.xml中的plugin.xml

像下面这样编辑 plugin.xml 文件:

... ...
<name>Geolocation</name>
<description>Cordova Geolocation Plugin</description>
<license>Apache 2.0</license>
<keywords>cordova,geolocation</keywords>
<repo>https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git</repo>
<issue>https://issues.apache.org/jira/browse/CB/component/12320638</issue>

<!-- android Code Comments
<platform name="android">

<config-file target="AndroidManifest.xml" parent="/*">
<uses-permissionandroid 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" />
</config-file>

</platform>
-->

<!-- amazon-fireos change to android-->
<platform name="android">

<js-module src="www/Coordinates.js" name="Coordinates">
<clobbers target="Coordinates" />
</js-module>

<js-module src="www/PositionError.js" name="PositionError">
<clobbers target="PositionError" />
</js-module>

<js-module src="www/Position.js" name="Position">
<clobbers target="Position" />
</js-module>

<js-module src="www/geolocation.js" name="geolocation">
<clobbers target="navigator.geolocation" />
</js-module>

<config-file target="res/xml/config.xml" parent="/*">
<feature name="Geolocation">
<param name="android-package" value="org.apache.cordova.geolocation.GeoBroker"/>
</feature>
</config-file>

<config-file target="AndroidManifest.xml" parent="/*">
<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" />
</config-file>

<source-file src="src/amazon/GeoBroker.java" target-dir="src/org/apache/cordova/geolocation" />
<source-file src="src/amazon/GPSListener.java" target-dir="src/org/apache/cordova/geolocation" />
<source-file src="src/amazon/NetworkListener.java" target-dir="src/org/apache/cordova/geolocation" />
<source-file src="src/amazon/CordovaLocationListener.java" target-dir="src/org/apache/cordova/geolocation" />

</platform>

<!-- ios -->
<platform name="ios">
... ...

6.再次添加插件

$ cordova plugin add E:\org.apache.cordova.geolocation

7、运行构建commond

$ cordova build android

8.检查是否正常

检查 YOUR_APP\plugins\android.json 必须包括:

{
"xml": "<feature name=\"Geolocation\"><param name=\"android-package\" value=\"org.apache.cordova.geolocation.GeoBroker\" /></feature>",
"count": 1
},
... ...
{
"xml": "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",
"count": 4
},
{
"xml": "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",
"count": 4
},
{
"xml": "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\" />",
"count": 1
}

检查 YOUR_APP\platforms\android\AndroidManifest.xml 必须包括:

<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_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />

检查 YOUR_APP\platforms\android\res\xml\config.xml 必须包括:

<feature name="Geolocation">
<param name="android-package" value="org.apache.cordova.geolocation.GeoBroker" />
</feature>

9.运行应用

编写地理定位代码以获取纬度和经度:

navigator.geolocation.getCurrentPosition(function(pos){
alert('suc')
alert(JSON.stringify(pos))
},function(errMsg){
alert(JSON.stringify(errMsg))
navigator.geolocation.getCurrentPosition(function(pos){
alert('suc')
alert(JSON.stringify(pos))
},function(errMsg){
alert(JSON.stringify(errMsg))
}, {
enableHighAccuracy: true,
timeout: 60*1000*2,
maximumAge: 1000*60*10
});
}, {
enableHighAccuracy: false,
timeout: 60*1000,
maximumAge: 1000*60*10

});

如果您的手机支持使用 wifi/3G 定位,那么我们将立即获取位置,否则您将看到 errMsg 超时,然后 geolocation 将使用 gps 定位位置原生实现。

现在我们得到了纬度和经度,谢天谢地,再也不需要重启安卓手机了。

如果还是有问题,请尝试安装清理webview缓存的插件:

https://github.com/moderna/cordova-plugin-cache

关于android - Phonegap 地理定位有时无法在 Android 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23383750/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com