首页 > 解决方案 > GeoLocation 为 Android 11 和 Ionic 6 返回“位置不可用”

问题描述

我有一个应用程序 Ionic Capacitor Angular,它只是获取 GeoLocation 并在屏幕上显示 lat lng

async ngOnInit(){
    await Geolocation.getCurrentPosition({
      enableHighAccuracy: true
    }).then((resp) => {
      this.latitude = resp.coords.latitude;
      this.longitude = resp.coords.longitude;

      this.options = {
        center: { lat: this.latitude, lng: this.longitude},
        zoom: 17
      };  
    }).catch((error) => {
      console.log('Error getting location', error);
    });      
  }

这在带有 Ionic Serve 的浏览器中运行得非常好。我还在 Android V9(knox api 级别 27)的设备(三星 S9)上成功启动了它。但是,当我在 Android V11(knox api level 33)的(Samsung S21 Ultra)上运行它时

我在应用程序的 AndroidManfiest.xml 中有以下内容

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
    <uses-feature android:name="android.hardware.location.gps" />

我在文档中看到了这个

注意:如果您的应用面向 Android 11(API 级别 30)或更高版本,系统会强制执行此最佳做法 [在单独的请求中要求前台和后台访问]。如果您同时请求前台位置权限和后台位置权限,系统会忽略该请求并且不会授予您的应用任何权限

我一直无法找到解决此问题的方法。有人可以帮忙提供一些见解。同样,这是实际的硬件,而不是模拟器。

标签: androidangularionic-frameworkcapacitor

解决方案


所以看起来这是 Cordova 和 Google Play 服务的问题。Google Play 服务 21.30.16 版似乎引入了这个错误。

https://github.com/ionic-team/capacitor/issues/4962


推荐阅读