问题描述
我正在尝试在我的离子应用程序上使用API级别29,并且我要求该应用程序向用户询问“允许所有时间”的位置。我已经添加了所有建议的修改。
我的AndroidManifest.xml:
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION">
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION">
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION">
<uses-permission android:name="android.permission.PERMISSION.FOREGROUND_SERVICE">
我的app.component.ts:
initializeApp() {
this.platform.ready().then(() => {
this.statusBar.styleDefault();
this.splashScreen.hide();
this.setProviders();
this.checkBackgroundPermission();
});
}
private async checkBackgroundPermission() {
try {
const result = await this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.ACCESS_BACKGROUND_LOCATION);
if (!result || result.hasPermission === false) {
this.requestPermissions();
}
} catch (error) {
this.requestPermissions();
}
}
private async requestPermissions() {
try {
const data = await this.androidPermissions.requestPermissions([
this.androidPermissions.PERMISSION.ACCESS_BACKGROUND_LOCATION,this.androidPermissions.PERMISSION.ACCESS_COARSE_LOCATION,this.androidPermissions.PERMISSION.ACCESS_FINE_LOCATION,this.androidPermissions.PERMISSION.ACTIVITY_RECOGNITION,this.androidPermissions.PERMISSION.FOREGROUND_SERVICE
]);
if (!data.hasPermission) {
throw new Error('No permission');
}
} catch (error) {
await this.alertService.showAlert(
'Background location','We need background location access in order to continue.'
);
this.signOut();
}
但是,当我定位到Api Level 29时,它并不会始终显示允许位置的请求。
但是,如果我使用Api Level 28,它会显示我需要的权限
有什么建议可以做到这一点?
解决方法
我有完全一样的问题。以下对我有用。
- 使用AndroidPermissions请求以下权限。
const data = await this.androidPermissions.requestPermissions([ "android.permission.ACCESS_BACKGROUND_LOCATION","android.permission.ACCESS_COARSE_LOCATION",this.androidPermissions.PERMISSION.ACCESS_FINE_LOCATION,]);
注意字符串"android.permission.ACCESS_BACKGROUND_LOCATION"
而不是this.androidPermissions.PERMISSION.ACCESS_BACKGROUND_LOCATION
,它在运行时实际上是未定义的。我的猜测是,ACCESS_BACKGROUND_LOCATION
插件发布时不存在AndroidPermissions
权限。
-
在背景位置之前调用
requestPermissions
方法。这很重要。 -
将
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
添加到platform \ android \ app \ src \ main \ AndroidManifest.xml
在您要调用ACCESS_BACKGROUND_LOCATION的检查权限的地方,还要检查ACCESS_FINE_LOCATION,如果没有找到它们,请调用requestPermissions方法。这应该有帮助。