Ionic 应用程序在安装时不要求访问位置的权限

roh*_*hpr 2 ionic-framework ngcordova

我已按照以下步骤创建应用程序:

ionic start ionic-maps blank
cd ionic-maps
ionic setup sass
ionic io init
ionic platform add android
bower install ngCordova
Run Code Online (Sandbox Code Playgroud)

在 index.html 中添加了以下几行:

<script src="lib/ngCordova/dist/ng-cordova.js"></script>
<script src="cordova.js"></script>
Run Code Online (Sandbox Code Playgroud)

更改 app.js 以包含 ngCordova:

angular.module('starter', ['ionic', 'starter.controllers', 'ngCordova'])
Run Code Online (Sandbox Code Playgroud)

安装地理定位插件:

cordova plugin add cordova-plugin-geolocation
Run Code Online (Sandbox Code Playgroud)

应用程序.js:

.state('app.location', {
  url: '/location',
  views: {
    'menuContent': {
      templateUrl: 'templates/location.html',
      controller: 'LocationCtrl'
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

位置.html:

<ion-view view-title="Search">
  <ion-content>
    <h1>Location: {{location}}</h1>
  </ion-content>
</ion-view>
Run Code Online (Sandbox Code Playgroud)

控制器.js:

.controller('LocationCtrl', function($scope, $state, $cordovaGeolocation) {
  $scope.location = 'Waiting';

  var options = {timeout: 10000, enableHighAccuracy: true};
  $cordovaGeolocation.getCurrentPosition(options).then(function(position) {
    var lat = position.coords.latitude;
    var lng = position.coords.longitude;
    console.log(lat, lng);
    $scope.location = lat + ' ' + lng;
  }, function(error) {
    console.log('Could not get location: ', error);
    $scope.location = 'Could not get location: ' + error + ' :: ' + JSON.stringify(error);
  });
})
Run Code Online (Sandbox Code Playgroud)

如果我在手机浏览器中打开 /location 端点(使用ionic serve),我会正确显示我的当前位置。到目前为止,一切都按预期工作。

/platforms/android/AndroidManifest.xml 中有以下几行:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

我正在使用新的云包构建器构建应用程序ionic package build android。ionic package list表明构建成功。

我预计在从 apk 安装应用程序时会要求我提供位置许可。但我只被要求full network access。在访问/locations屏幕时,我收到一个错误[object PositionError。json.stringify(error)是{}并且Object.keys(error).length是0。

使用navigator.geolocation.getCurrentPosition而不是$cordovaGeolocation.getCurrentPosition没有帮助。

alert(error.code)是2并且alert(error.message)是application does not have sufficient geolocation permisions.

PS:我已经确保 GPS 已启用并且它适用于其他应用程序。

roh*_*hpr 8

cordova plugin add cordova-plugin-geolocation使用--save选项 ie运行,cordova plugin add cordova-plugin-geolocation --save以便将插件添加到config.xml.

Alt:添加"cordova-plugin-geolocation"到"cordovaPlugins"inpackage.json也解决了该问题,但已被弃用。