如何解决“无法启用 MyLocation 图层,因为未授予位置权限”?

问题描述 投票:0回答:7

我在我的 flutter 页面中包含了一个简单的 GoogleMap 组件,只是为了看看它是否有效,但我无法解决这个问题。我编译应用程序,当我导航到页面时,我在控制台中收到以下错误:

“E/GoogleMapController(3376):无法启用 MyLocation 图层,因为未授予位置权限”

我可以看到组件,但看不到地图(见图):

googleMap example flutter

新增配置:

//(AndroidManifest.xml)

<meta-data android:name="com.google.android.geo.API_KEY" android:value="apikey"/>

//(pubspec.yaml)
google_maps_flutter: ^0.5.0

编辑 - 解决方案

添加请求权限的权限包。你可以安装这个包来管理你的权限:https://pub.dartlang.org/packages/permission

android dart flutter
7个回答
7
投票

android.permission.ACCESS_FINE_LOCATION
被认为是危险的权限。你有没有使用
permission
包来请求权限? https://pub.dartlang.org/packages/permission


6
投票

截至 2019 年 12 月,我没有成功使用 permissions 插件。即使在添加了必要的清单数据并将项目升级到 Android API 29

 之后,它仍然返回,
PermissionStatus.notAgain
.

起作用的是添加

permissions_handler 插件和他们提供的 manifest 数据(只是位置部分)。此外,将 Android API 升级到 29,详见here,并将compileSDKVersion

targetSdkVersion
android/app/build.gradle
更改为
29

Mainfest 数据,就在目录

<application>

 中的
android/app/src/main/AndroidManifest.xml
标签之前

<!-- Permissions options for the `location` group --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

重新启动 IDE 以确保所有这些更改生效。然后在您的应用程序中请求权限:

import 'package:permission_handler/permission_handler.dart'; void setPermissions() async{ Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]); }
    

4
投票
可能是您的 API 密钥设置不正确并且未授予位置服务访问权限。

检查并启用这些服务


3
投票
如果在模拟器上,请删除

AndroidManifest 文件中的以下内容:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

并保持:

<uses-permission android:name="android.permission.INTERNET"/>

这对我有用。我还关闭并在模拟器中重建了整个应用程序。


1
投票
我设法解决了这个问题:

    在 Google 控制台上启用 Map SDK。
  1. 停止项目运行并运行
  2. flutter clean 命令。
  3. 从设备上卸载应用程序并再次运行。

0
投票
在运行 runApp() 中的无状态/有状态小部件之前,在主函数中包含此 if 语句。

void main() { if (defaultTargetPlatform == TargetPlatform.android) { AndroidGoogleMapsFlutter.useAndroidViewSurface = true; } runApp(LocationPage()); }
如果您遇到更多问题,请检查日志中的链接以帮助您使用 Google Maps SDK 设置您的项目。
分步过程易于遵循和理解。
如果您有任何问题,请告诉我。


0
投票

添加到AndroidManifest文件后:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

对于Android 11及以上平台,检查并启用位置权限如下:

//ask for location permission await Permission.locationWhenInUse.request();
    
© www.soinside.com 2019 - 2024. All rights reserved.