带有PhoneGap的iPhone上的位置许可警报

时间:2009-11-04 12:49:42

标签: iphone cordova core-location

如何更改警报上的字符串:

  

(Appname /无论是什么)想要使用您当前的位置

当然,我只想更改appname部分。因为当你使用PhoneGap框架时,字符串非常丑陋,如下所示:

  

/var/mobile/Applications/157EB70D-4AA7-826E-690F0CBE0F/appname.app/www/index.html

有人有想法吗?

19 个答案:

答案 0 :(得分:92)

设备准备好后,您需要进行地理定位。例如,以下Jquery代码将在没有令人讨厌的警报的情况下进行地理定位:

$(function(){
  document.addEventListener("deviceready", onDeviceReady, false);
})

function onDeviceReady() {
  navigator.geolocation.getCurrentPosition(onSuccess, onError);     
}

function onSuccess(position) {
  // your callback here 
}

function onError(error) { 
  // your callback here
}

答案 1 :(得分:17)

在phonegap 3.0上,需要遵循Pius Uzamere的答案并安装插件。

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git

否则您将获得双重权限请求。

答案 2 :(得分:13)

我只是按照文档解决了问题。 打开终端并cd到您的项目并输入以下命令。 $ cordova插件添加https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git

同样在config.xml中添加

<feature name="Geolocation">
    <param name="ios-package" value="CDVLocation" />
</feature>

它将解决这个问题。 :)

来源:http://docs.phonegap.com/en/3.0.0/cordova_geolocation_geolocation.md.html#The%20Command-line%0AInterface

答案 3 :(得分:8)

虽然这个问题比较长,但我发现了类似的问题herehere

对于我的解决方案,我必须将NSLocationWhenInUseUsageDescription添加到.plist文件中。但是,我想我的geolocation插件已经过时,我不得不先更新它。然后我不得不删除/添加Cordova iOS平台。最后,我将NSLocationWhenInUseUsageDescription添加到.plist文件中。

首先,删除/添加地理位置插件:

cordova plugin rm org.apache.cordova.geolocation
cordova plugin add org.apache.cordova.geolocation

其次,删除/添加iOS平台:

cordova platform rm ios
cordova platform add ios

最后,将NSLocationWhenInUseUsageDescription添加到.plist。打开/platforms/ios/{project}/{project}-Info.plist并添加以下内容:

<key>NSLocationWhenInUseUsageDescription</key>
<string>[App Name] would like to access your location when running and displayed.</string>

有关NSLocationWhenInUseUsageDescriptionNSLocationAlwaysUsageDescriptionNSLocationUsageDescription的详细信息,请参阅此iOS Developer Library link

答案 4 :(得分:7)

最后解决了这个问题。

在index.html中移动你的cordova.js

       &lt; script src =“cordova.js”&gt;&lt; / script&gt;

作为要包含的第一个js文件(特别是确保它在地图上方包含js)。这将确保提示只显示一次。

不需要其他codejs或ondeviceready。

答案 5 :(得分:2)

在寻找我已经创建的解决方案后,只需在添加插件位置时添加一个变量

cordova plugin add cordova-plugin-geolocation --variable GEOLOCATION_USAGE_DESCRIPTION="your usage message"

答案 6 :(得分:2)

要解决此问题,我必须运行cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-geolocation.git,它会自动将以下内容添加到config.xml中:

<feature name="Geolocation">
     <param name="ios-package" value="CDVLocation" />
</feature>

为了使工作正常,我还必须将这些行放入config.xml:

<plugins>
        <plugin name="Device" value="CDVDevice" />
        <plugin name="Logger" value="CDVLogger" />
        <plugin name="Compass" value="CDVLocation" />
        <plugin name="NetworkStatus" value="CDVConnection" />
        <plugin name="Debug Console" value="CDVDebugConsole" />
        <plugin name="Geolocation" value="CDVLocation" />
        <plugin name="SplashScreen" value="CDVSplashScreen" />
        <plugin name="Battery" value="CDVBattery" />
        <plugin name="Globalization" value="CDVGlobalization" />
    </plugins>

希望它有所帮助。

答案 7 :(得分:2)

上述答案都不适合我。我的位置请求已经在设备上启动了。将以下内容添加到config.xml修复了问题:

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

答案 8 :(得分:1)

确保在设备准备好后调用我的geolocation请求后,确保正确安装和配置了地理位置插件,我仍然收到了难看的弹出窗口。

我通过将我的cordova.js文件和cordova_plugins.js文件移动并引用到我的应用程序的根目录(它们最初位于子文件夹中)来解决它,因此cordova.js的路径会是:

<script src="cordova.js"></script>  

我觉得这应该包含在文档中(可能是这样,但我还没有设法找到它)

答案 9 :(得分:1)

  • 只需将“cordova.js”文件包含在您访问此位置的html文件中即可解决此问题。什么都不需要花哨。

答案 10 :(得分:0)

由于我现在因同样的问题而奋斗了几天并最终找到了解决方案,所以我决定与仍然无法解决问题的人分享。

解决方案很简单:www目录中的plugins目录中缺少geolocation插件,即使我通过phonegap命令行界面添加插件并且插件文件位于/ Plugins目录中。所以你只需将丢失的文件复制到/ www / plugins就可以了。就这么简单。

如果有人需要丢失的文件:http://d.pr/f/xqhq

btw:我正在使用cordova 3.2.0。

我希望这也适合你!

答案 11 :(得分:0)

我按照所有说明操作,但仍然失败了。最后,我玩了一下PhoneGap演示,找到了最终解决方案

  1. 将所有js文件和html文件移动到同一文件夹(甚至不是子文件夹)。恭喜!问题解决了,没有任何许可警报:)

  2. BTW,你最好使用“setTimeout(function(){utility.getGeoData();},1000);”我找到了“document.addEventListener(”deviceready“,utility.getGeoData(),false);”不适合我。

  3. 希望在您找不到上述解决方案时有所帮助:)

    祝你好运!

答案 12 :(得分:0)

Phoengap / Cordova版本3.5。

与Manuel上面的答案类似,但这次插件不会安装在platforms / ios / [appname] / Plugins文件夹中。

我的修复方法是在../platforms/ios/[appname]/Plugins文件夹&gt;中手动为插件创建一个新文件夹。然后将其重命名为org.apache.cordova.geolocation&gt;然后将插件的.h和.m文件复制到其中。

您可以在[root] /plugins/org.apache.cordova.geolocation/src/ios目录中找到geoLocation插件的.m和.h文件。

答案 13 :(得分:0)

1)修改PhoneGapLib项目中的Location.m.替换所有引用 navigator.geolocation with navigator_geo

2)将phonegap.js复制到phonegap2.js并放入app的根目录。我现在有了 我知道每次构建我的应用程序并将其加载到设备上 或模拟器,正在重新生成phonegap.js文件。好。好吧,我 需要修改它,所以让我们只使用另一个并处理 将来升级的麻烦。

3)修改为其创建构造函数的行(在phonegap2.js中) 626上的navigator.geolocation是... if(typeof navigator._geo ==“undefined”)navigator._geo = new Geolocation();

4)现在,只要您想使用PHONEGAP GPS,就可以在HTML中使用, 你可以用navigator._geo.getCurrentPosition或类似的方法引用它 5)享受ONE,CLEAN,位置提醒权限 向您的用户透露您使用PhoneGap并构建的智能 应用程序与HTML / JS。

* CAVEAT,请帮助! *

如果我运行watchPosition函数,我将获得第一个位置 更新各种统计数据。之后,它会一直报告 错误。我认为在这30秒的准确时间里这很糟糕 GPS就这些东西?

http://groups.google.com/group/phonegap/browse_thread/thread/8067c2037816a9ad

答案 14 :(得分:0)

将Cordova从3.6升级到4.3后出现此错误(以及其他许多错误)。

我认为升级过程中有一些失败,对我来说唯一可行的解​​决方案是cordova platform rm ios然后cordova platform add ios

/!\您将丢失所有ios项目设置,并且需要重新上传启动和图标。

答案 15 :(得分:0)

我来这里参加聚会,但会回答这个问题以供参考。 答案是使用phonegap附带的phonegap.js中的地理定位功能。您可以在http://www.phonegap.com上的Phonegap网站上找到此类说明。

如果您使用navigator.geolocation,则使用默认的Safari地理位置系统。这种情况发生在PhoneGap通过在Safari实例中有效运行页面而工作。如果您将phonegap.js包含在您的网站中,您可以使用PhoneGap的Objective-C代码公开的单独地理定位方法,该方法将显示在其他应用程序中看到的行为,并要求[您的应用程序名称]获得许可。

答案 16 :(得分:0)

在我的情况下,我使用Cordova / Ionic并遇到了同样的问题。这是因为设备准备好之前的代码。我只是在&#34; deviceready&#34;上用document.addEventListener包装代码。例如:

document.addEventListener("deviceready", function () {
  $cordovaGeolocation.getCurrentPosition(options).then(function(position){
      ...your code here...
    });
});

然后没有出现附加消息。

答案 17 :(得分:-1)

“将所有js文件和html文件移动到同一个文件夹(甚至不包括子文件夹)。祝贺!问题解决了,没有任何许可警告:)”像Caleb说的对我有用,只能移动cordova。 js文件到root并将插件添加到config.xml

答案 18 :(得分:-2)

项目的Bundle显示名称是什么?

尝试从默认值${PRODUCT_NAME}手动更改并查看..

使用位置警报的权限仅选择您的包显示名称!