PhoneGap的地理位置有时不工作的机器人 [英] Phonegap geolocation sometimes not working on android

查看:297
本文介绍了PhoneGap的地理位置有时不工作的机器人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经用科尔多瓦V3.4.1来构建Android和iOS应用,iOS上的地理定位功能正在恢复得很快,总是能正常工作,但在Android上,有时无法正常工作。

但奇怪的是我重新启动我的Andr​​oid手机之后,它工作正常。在超过几个小时的地理位置得到现在的位置是非常迅速无论是在WiFi和3G。

但薮小时后,我再次打开该应用程序,地理位置不能work.Sometimes当我之外,它可以得到现在的位置是与GPS卫星,但速度很慢,经常会出现超时错误。

我尝试删除应用程序,并重新安装一遍,但问题依然存在,除非重新启动我的Andr​​oid phone.when我重新启动我的Andr​​oid手机,地理定位功能在将来再次合作罚款几个小时。

我有测试薮android`s的手机,如samsang注2,galaxy4等,它们都具有相同的问题。当我重新启动它,他们可以得到的位置非常quicly。

这个问题困扰了我很长一段时间,所以有人帮帮我吗?

下面是我下面的code:

  navigator.geolocation.getCurrentPosition(功能(POS){
                CB(NULL,POS)
            },功能(ERRMSG){
    navigator.geolocation.getCurrentPosition(功能(POS){
            CB(NULL,POS)
    },功能(ERRMSG){
    CB(ERRMSG)
    },{
    enableHighAccuracy:真正的,
    超时:60 * 1000 * 2,
    maximumAge:1000 * 60 * 10
   });
},{
    enableHighAccuracy:假的,
    超时:10 * 1000,
    maximumAge:1000 * 60 * 10
});
 

我的config.xml:

 <功能名称=地理位置>
    < PARAM NAME =Android的包值=org.apache.cordova.geolocation.GeoBroker/>
< /功能>
 

解决方案

最后,我有解决这个问题,现在我的Andr​​oid手机, getCurrentPosition 函数返回的位置信息来源非常快每一次,我再也不需要再重新启动我的电话! 我不知道阉科尔多瓦V3.4.1的geoloation插件有错误。

要出现这个问题的原因是,我们总是使用浏览器的 navigator.geolocation.getCurrentPosition 功能定位现在的位置,所以我们必须让应用程序使用的科尔多瓦本地实现,而不是HTML5。

下面是与科尔多瓦V3.4.1的解决方案,希望它可以帮助你,其实它解决了我的问题。

解决步骤:

1.去除的org.apache.cordova.geolocation

  $科尔多瓦插件RM org.apache.cordova.geolocation
 

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

  $科尔多瓦插件添加org.apache.cordova.geolocation
 

3.复印插件到E:\

输入插件文件夹,如YOUR_APP_FOLDER \插件\

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

再次4.取出插件

  $科尔多瓦插件RM org.apache.cordova.geolocation
 

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

编辑如下图所示plugin.xml文件中:

  ......
<名称>&地理位置LT; /名称>
<描述>科尔多瓦地理位置插件< /描述>
<许可>的Apache 2.0< /许可>
<关键字>科尔多瓦,地理位置< /关键字>
&LT;回购&GT;的https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git< /回购&GT;
&LT;问题&GT;的https://issues.apache.org/jira/browse/CB/component/12320638< /期&GT;

&LT;! - 安卓code评论
&LT;平台名称=机器人&GT;

    &LT;配置文件中的目标=AndroidManifest.xml中父=/ *&GT;
        &LT;使用-permissionandroid机器人:名称=android.permission.ACCESS_COARSE_LOCATION/&GT;
        &LT;使用-权限的Andr​​oid:名称=android.permission.ACCESS_FINE_LOCATION/&GT;
        &LT;使用-权限的Andr​​oid:名称=android.permission.ACCESS_LOCATION_EXTRA_COMMANDS/&GT;
    &LT; /配置文件&GT;

&LT; /平台&GT;
 - &GT;

 &LT;! - 亚马逊fireos变化到Android  - &GT;
&LT;平台名称=机器人&GT;

    &LT; JS模块SRC =WWW / Coordinates.jsNAME =坐标&GT;
        &LT;则会覆盖目标=坐标/&GT;
    &LT; / JS模块&GT;

    &LT; JS模块SRC =WWW / PositionError.jsNAME =PositionError&GT;
        &LT;则会覆盖目标=PositionError/&GT;
    &LT; / JS模块&GT;

    &LT; JS模块SRC =WWW / Position.jsNAME =位置&GT;
        &LT;则会覆盖目标=位置/&GT;
    &LT; / JS模块&GT;

    &LT; JS模块SRC =WWW / geolocation.jsNAME =地理位置&GT;
        &LT;则会覆盖目标=navigator.geolocation/&GT;
    &LT; / JS模块&GT;

    &LT;配置文件中的目标=RES / XML / config.xml中父=/ *&GT;
        &LT;功能名称=地理位置&GT;
            &LT; PARAM NAME =Android的包值=org.apache.cordova.geolocation.GeoBroker/&GT;
        &LT; /功能&GT;
    &LT; /配置文件&GT;

    &LT;配置文件中的目标=AndroidManifest.xml中父=/ *&GT;
        &LT;使用-权限的Andr​​oid:名称=android.permission.ACCESS_COARSE_LOCATION/&GT;
        &LT;使用-权限的Andr​​oid:名称=android.permission.ACCESS_FINE_LOCATION/&GT;
        &LT;使用-权限的Andr​​oid:名称=android.permission.ACCESS_LOCATION_EXTRA_COMMANDS/&GT;
    &LT; /配置文件&GT;

    &lt;信源文件SRC =SRC /亚马逊/ GeoBroker.java目标DIR =SRC /组织/阿帕奇/科尔多瓦/地理位置/&GT;
    &lt;信源文件SRC =SRC /亚马逊/ GPSListener.java目标DIR =SRC /组织/阿帕奇/科尔多瓦/地理位置/&GT;
    &lt;信源文件SRC =SRC /亚马逊/ NetworkListener.java目标DIR =SRC /组织/阿帕奇/科尔多瓦/地理位置/&GT;
    &lt;信源文件SRC =SRC /亚马逊/ CordovaLocationListener.java目标DIR =SRC /组织/阿帕奇/科尔多瓦/地理位置/&GT;

&LT; /平台&GT;

&LT;! -  IOS  - &GT;
&LT;平台名称=IOS&GT;
......
 

再次6.加插件

  $科尔多瓦插件添加E:\ org.apache.cordova.geolocation
 

7,运行构建commond

  $科尔多瓦构建Android
 

8.检查是否正常工作

检查 YO​​UR_APP \插件\ android.json 必须包括:

  {
   XML:&LT;功能名称= \地理位置\&GT;&LT; PARAM NAME = \机器人包\价值= \org.apache.cordova.geolocation.GeoBroker \/&GT;&LT; /功能&gt;中,
   伯爵:1
},
......
{
  XML:&LT;使用-许可安卓名= \android.permission.ACCESS_COARSE_LOCATION \/&gt;中,
  伯爵:4
},
{
   XML:&LT;使用-许可安卓名= \android.permission.ACCESS_FINE_LOCATION \/&gt;中,
    伯爵:4
},
{
  XML:&LT;使用-许可安卓名= \android.permission.ACCESS_LOCATION_EXTRA_COMMANDS \/&gt;中,
  伯爵:1
 }
 

检查 YO​​UR_APP \平台\机器人\的Andr​​oidManifest.xml 必须包括:

 &LT;使用-权限的Andr​​oid:名称=android.permission.ACCESS_COARSE_LOCATION/&GT;
&LT;使用-权限的Andr​​oid:名称=android.permission.ACCESS_FINE_LOCATION/&GT;
&LT;使用-权限的Andr​​oid:名称=android.permission.ACCESS_NETWORK_STATE/&GT;
&LT;使用-权限的Andr​​oid:名称=android.permission.ACCESS_LOCATION_EXTRA_COMMANDS/&GT;
 

检查 YO​​UR_APP \平台\机器人\水库\ XML \ config.xml中必须包括:

 &LT;功能名称=地理位置&GT;
    &LT; PARAM NAME =Android的包值=org.apache.cordova.geolocation.GeoBroker/&GT;
&LT; /功能&GT;
 

9.run应用程序

写geelocation code获得纬度和经度:

  navigator.geolocation.getCurrentPosition(功能(POS){
            警报(SUC)
            警报(JSON.stringify(POS))
        },功能(ERRMSG){
               警报(JSON.stringify(ERRMSG))
               navigator.geolocation.getCurrentPosition(功能(POS){
                 警报(SUC)
                 警报(JSON.stringify(POS))
               },功能(ERRMSG){
                 警报(JSON.stringify(ERRMSG))
               },{
               enableHighAccuracy:真正的,
               超时:60 * 1000 * 2,
               maximumAge:1000 * 60 * 10
               });
          },{
enableHighAccuracy:假的,
超时:60 * 1000,
maximumAge:1000 * 60 * 10
 

});

如果你的手机支持使用WIFI / 3G的定位,然后,我们将立即收到的位置,否则你将看到 ERRMSG超时然后地理位置将使用GPS定位现在的位置是与本地执行。

现在我们得到的纬度和经度,并且永远不需要重新启动android手机agian,谢天谢地。

如果您仍然有问题,尝试安装插件清理的WebView缓存:

<一个href="https://github.com/moderna/cordova-plugin-cache">https://github.com/moderna/cordova-plugin-cache

I have using cordova v3.4.1 to build android and ios app, on ios geolocation function is returning very quickly and works fine always,but on android, sometimes it not working.

The strange thing is after I reboot my android phone,it works fine. In more than a few hours geolocation gets the postion very quickly both in wifi and 3G.

But after serval hours, I open the app again, the geolocation can not work.Sometimes when I outside, it can get postion with gps satellite,but very slow,often occur timeout error.

I try to remove the app and reinstall it again,but the problem still exist,unless reboot my android phone.when I reboot my android phone,geolocation function is working fine again in future a few hours.

I have test serval android`s phone such as samsang note2, galaxy4 etc, they all have the same problem.when I reboot it, they can get location very quicly.

This problem has troubled me for a long time, so somebody help me?

here is my code below:

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
});

my config.xml:

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

解决方案

Finally I have solve the problem,now on my android phone, getCurrentPosition function return location infomation very quickly every time, I never need reboot my phone again! I'm not sure wether cordova v3.4.1’s geoloation plugin has bugs.

The reason to occur this problem is we always to use browser's navigator.geolocation.getCurrentPosition function to locate the postion,so we must let app use cordova native implementation instead of html5.

Here is the the solution with cordova v3.4.1, hope it can help you,in fact it has resolved my question.

solve step:

1.remove the org.apache.cordova.geolocation

$ cordova plugin rm org.apache.cordova.geolocation

2.reinstall a new org.apache.cordova.geolocation plugin

$ cordova plugin add org.apache.cordova.geolocation

3.copy the plugin to e:\

enter the plugin folder,such as ‘YOUR_APP_FOLDER\plugins\’

copy the hole org.apache.cordova.geolocation to E:\org.apache.cordova.geolocation

4.remove the plugin again

$ cordova plugin rm org.apache.cordova.geolocation

5.edit the plugin.xml in E:\org.apache.cordova.geolocation\plugin.xml

edit the plugin.xml file like below:

... ...
<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.add plugin again

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

7、run build commond

$ cordova build android

8.check if it work fine

check YOUR_APP\plugins\android.json must include:

{
   "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
 }

check YOUR_APP\platforms\android\AndroidManifest.xml must include:

<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" />

check YOUR_APP\platforms\android\res\xml\config.xml must include:

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

9.run the app

write the geelocation code to get lat and lng:

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

});

if your phone support use wifi/3G locate then we will get location immediately,else you will see the errMsg timeout and then geolocation will use gps to locate postion with native implement.

now we get the lat and lng, and never need reboot the android phone agian,thank goodness.

if you still have the problem,try to install the plugin to clean the webview cache:

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

这篇关于PhoneGap的地理位置有时不工作的机器人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆