Ionic 应用程序在安装时不请求访问位置的权限
Ionic app doesn't ask permission to access location while installing
我按照以下步骤创建了一个应用程序:
ionic start ionic-maps blank
cd ionic-maps
ionic setup sass
ionic io init
ionic platform add android
bower install ngCordova
向 index.html 添加了以下行:
<script src="lib/ngCordova/dist/ng-cordova.js"></script>
<script src="cordova.js"></script>
已更改 app.js 以包含 ngCordova:
angular.module('starter', ['ionic', 'starter.controllers', 'ngCordova'])
安装了地理定位插件:
cordova plugin add cordova-plugin-geolocation
app.js:
.state('app.location', {
url: '/location',
views: {
'menuContent': {
templateUrl: 'templates/location.html',
controller: 'LocationCtrl'
}
}
})
location.html:
<ion-view view-title="Search">
<ion-content>
<h1>Location: {{location}}</h1>
</ion-content>
</ion-view>
controllers.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);
});
})
如果我在 phone 的浏览器中打开 /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" />
我正在使用 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 已启用并且它适用于其他应用程序。
运行 cordova plugin add cordova-plugin-geolocation
带有 --save
选项,即 cordova plugin add cordova-plugin-geolocation --save
以便插件被添加到 config.xml
.
Alt:在 package.json
中将 "cordova-plugin-geolocation"
添加到 "cordovaPlugins"
也解决了问题,但已被弃用。
我按照以下步骤创建了一个应用程序:
ionic start ionic-maps blank
cd ionic-maps
ionic setup sass
ionic io init
ionic platform add android
bower install ngCordova
向 index.html 添加了以下行:
<script src="lib/ngCordova/dist/ng-cordova.js"></script>
<script src="cordova.js"></script>
已更改 app.js 以包含 ngCordova:
angular.module('starter', ['ionic', 'starter.controllers', 'ngCordova'])
安装了地理定位插件:
cordova plugin add cordova-plugin-geolocation
app.js:
.state('app.location', {
url: '/location',
views: {
'menuContent': {
templateUrl: 'templates/location.html',
controller: 'LocationCtrl'
}
}
})
location.html:
<ion-view view-title="Search">
<ion-content>
<h1>Location: {{location}}</h1>
</ion-content>
</ion-view>
controllers.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);
});
})
如果我在 phone 的浏览器中打开 /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" />
我正在使用 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 已启用并且它适用于其他应用程序。
运行 cordova plugin add cordova-plugin-geolocation
带有 --save
选项,即 cordova plugin add cordova-plugin-geolocation --save
以便插件被添加到 config.xml
.
Alt:在 package.json
中将 "cordova-plugin-geolocation"
添加到 "cordovaPlugins"
也解决了问题,但已被弃用。