API级别始终保持离子允许位置

问题描述

我正在尝试在我的离子应用程序上使用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时,它并不会始终显示允许位置的请求。

allthetime

但是,如果我使用Api Level 28,它会显示我需要的权限

有什么建议可以做到这一点?

解决方法

我有完全一样的问题。以下对我有用。

  1. 使用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权限。

  1. 在背景位置之前调用requestPermissions方法。这很重要。

  2. <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />添加到platform \ android \ app \ src \ main \ AndroidManifest.xml

,

在您要调用ACCESS_BACKGROUND_LOCATION的检查权限的地方,还要检查ACCESS_FINE_LOCATION,如果没有找到它们,请调用requestPermissions方法。这应该有帮助。