我在我的 flutter 页面中包含了一个简单的 GoogleMap 组件,只是为了看看它是否有效,但我无法解决这个问题。我编译应用程序,当我导航到页面时,我在控制台中收到以下错误:
“E/GoogleMapController(3376):无法启用 MyLocation 图层,因为未授予位置权限”
我可以看到组件,但看不到地图(见图):
新增配置:
//(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.permission.ACCESS_FINE_LOCATION
被认为是危险的权限。你有没有使用permission
包来请求权限? https://pub.dartlang.org/packages/permission
截至 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]);
}
AndroidManifest 文件中的以下内容:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
并保持:
<uses-permission android:name="android.permission.INTERNET"/>
这对我有用。我还关闭并在模拟器中重建了整个应用程序。
void main() {
if (defaultTargetPlatform == TargetPlatform.android) {
AndroidGoogleMapsFlutter.useAndroidViewSurface = true;
}
runApp(LocationPage());
}
如果您遇到更多问题,请检查日志中的链接以帮助您使用 Google Maps SDK 设置您的项目。
分步过程易于遵循和理解。
如果您有任何问题,请告诉我。
添加到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();