android - 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)或更高版本,系统会强制执行此最佳做法 [在单独的请求中要求前台和后台访问]。如果您同时请求前台位置权限和后台位置权限,系统会忽略该请求并且不会授予您的应用任何权限
我一直无法找到解决此问题的方法。有人可以帮忙提供一些见解。同样,这是实际的硬件,而不是模拟器。
解决方案
所以看起来这是 Cordova 和 Google Play 服务的问题。Google Play 服务 21.30.16 版似乎引入了这个错误。
推荐阅读
- perl - Perl CGI 元标记视口
- javascript - 在 Pusher 中不会收到任何警报消息
- javascript - Node.js 问题添加包
- ruby-on-rails - 将 json hash 转换为 rails 上的键
- javascript - angular.copy 不复制具有子对象或数组的对象
- php - 在我的情况下,有效地检查从给定日期时间是否正好过去了 2 天
- python - 在 tkinter 中选择对 JPG 文件执行特定操作的文件夹
- javascript - 在 Chrome 中工作,但在 Safari 中中断:无效的正则表达式:无效的组说明符名称 /(?<=\/)([^#]+)(?=#*)/
- javascript - 如何在 json 响应中不存在的 jquery 数据表中再添加一列
- laravel - 在用户模型中传递 ID