Phonegap GPS要求两次

时间:2014-03-05 23:02:56

标签: ios iphone cordova gps phonegap-plugins

我意识到这个问题已被问过100次了,我觉得我已经阅读了所有问题和答案,但我没有找到解决问题的方法。

我已正确安装和配置PhoneGap插件。

我已确认所有文件都位于插件中> org.apache.cordova.geolocation文件夹

以下是对config.xml中地理定位功能的调用

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

我的应用程序仅在用户要求查找其位置时才调用地理位置。即便如此,我确保使用:

document.addEventListener("deviceready", beginSetup, false); 

在调用地理位置之前确保设备准备就绪。

第一个请求使用我的应用名称。第二个调用显示一个长丑陋的URL。第一次请求后,应用程序名称请求消失(完美到目前为止),但丑陋的网址仍然要求获得许可。

设备准备就绪后,我将位置调用绑定到tap事件,如下所示:

  geocoder = new google.maps.Geocoder();

  $("#my-location").bind( "tap", function(e){
      //unrelated code omitted
      //I know these times are big, but this is just testing at this point
      var options = { maximumAge: 3600000, timeout: 60000, enableHighAccuracy: true };

      if(map != null){
            circle.setMap(null);
            personalCircle.setMap(null);
            google.maps.event.clearInstanceListeners(map);
            deleteMarkers();
            map = null;
      }

      navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
});

提前感谢您的建议。如果您想查看其他任何代码,请与我们联系。

修改 我根据@cagdas建议在config.xml中添加了以下行。仍然遇到同样的问题。

<gap:plugin name="org.apache.cordova.geolocation" />
<feature name="http://api.phonegap.com/1.0/geolocation"/>

更新

最新版本的PhoneGap似乎解决了这个问题。现在,当我编译应用程序时,我不再有这个问题。我没有更改代码中的任何内容。

3 个答案:

答案 0 :(得分:1)

您需要在config.xml中包含以下行:

<gap:plugin name="org.apache.cordova.geolocation" />

如果未包含该内容,HTML地理位置会尝试查找您的位置,并且正如您所提到的一些网址(可能包括您的MAC或其他设备标识符)需要获得批准。

包含以上行后,对于Android和Windows设备,请在下面插入以适应正确的预设:

<feature name="http://api.phonegap.com/1.0/geolocation"/>

请使用正确的phonegap版本检查这些文件:

http://docs.build.phonegap.com/en_US/2.9.0/configuring_features.md.html https://build.phonegap.com/plugins/627

答案 1 :(得分:1)

虽然我并不完全清楚您遇到的问题:&#34;首先要求&#34;和#34;第二次电话&#34;,我会提供这个,fwiw ......

初始应用安装和执行将显示一个提示,允许应用使用您的位置(每个CDV配置需要地理位置)。这是包含您的应用名称的提示。这是一次性事情,用户如何回答确定是否已授予权限,您应该在进行后续位置调用之前进行验证。

虽然建议在调用任何地理定位方法之前验证位置权限,但如果未授予权限,则应该失败。

长长的丑陋网址&#34;与显式地理定位调用有关。

如果你在模拟器中看到这个,那么请确保你有IOS模拟器 - &gt;调试 - &gt;位置未设置为无

如果你一个接一个地获得这些,而不是点击你的控件,那么必须在事件处理程序之外发生地理定位调用,或者以编程方式触发事件处理程序。

如果您在点击控件后一个接一个地获得这些,那么项目设置中可能会出现问题,因为第一个提示应该在初始安装中显示。

请注意,您无需从模拟器中删除该应用,以便安装&#34;初始应用安装&#34;发生(或重置模拟器)。

如果这些都没有帮助,请提供iOS和phonegap / cordova版本。

答案 2 :(得分:1)

您必须在index.html中包含cordova.js脚本。

<script type="text/javascript" src="cordova.js"></script>

生成此文件并在构建时添加到platforms/<platform>/www。几天来我一直反对这个问题,并且从未看到任何明确提及将此文件保留为止会导致第二个权限请求。我检查了官方文档中的地理定位示例,当然,这行也在他们的index.html文件中。

我知道这是一个老问题,但我希望将来可以帮助某人。