Flutter 高德地图插件amap_location 运行报错问题解决方法

本文记录了在使用Flutter高德地图插件amap_location时遇到的运行错误,错误源于隐私政策更新。解决方案是回退插件版本到5.5.1,并将插件本地化引入项目,避免依赖最新版本。通过修改build.gradle文件并创建本地插件,成功解决了问题,使得项目能够正常运行。

1、前言

正在使用的插件amap_location今天突然报错,项目无法运行,报错提示如

2、错误提示

.../amaplocation/AmapLocationPlugin.java:287:错误:未报告的异常错误Exception;必须对其进行捕获或声明以便抛出 locationClient = new AMapLocationClient(getApplicationContext());

请添加图片描述

3、原因排查

修改了一通无果,一通查找资料,偶然间看到群里在讨论,知道了是隐私政策的问题导致,暂时的解决方案是不用最新的高德com.amap.api:location,最新的有隐私政策,最优方案应该是接入最新的政策,具体未实践

4、解决方法

  • 1、把高德的amap_location包根据上面路径找到,在flutter/.pub-cache/hosted/…里面,拿到后复制一份出来,将android/build.gradle里面的依赖最新的改掉,目前我这里是改成5.5.1

在这里插入图片描述
在这里插入图片描述

  • 2、把包里面的example删除,在项目里面创建
### 如何在 Android Studio 中导入 `amap_flutter_location` 插件 #### 创建 Flutter 项目并打开 Android Studio 编辑模式 当创建一个新的 Flutter 项目之后,可以通过点击 IDE 右上角提示来开启编辑模式。对于现有项目,也可以选择进入项目的根目录下的 `build.gradle` 文件,在右上角会看到有选项用于在 Android Studio 中进行编辑[^1]。 #### 添加依赖项到 pubspec.yaml 文件 为了能够使用高德定位插件功能,需要向项目的 `pubspec.yaml` 文件中添加相应的依赖声明: ```yaml dependencies: flutter: sdk: flutter amap_flutter_location: ^latest_version # 替换成最新版本号 ``` 保存文件后,IDE 应该自动执行包同步操作;如果没有,则手动运行命令 `flutter packages get` 来安装新加入的软件包[^2]。 #### 获取应用签名 (SHA-1) 由于涉及到地图服务的安全性和合法性验证,开发者必须提供有效的 SHA-1 签名值给高德开放平台注册应用程序时使用。建议通过 Android Studio 自动生成 keystore 并提取对应的 SHA-1 值,而不是尝试自行构建 keystore,以减少可能出现的问题[^5]。 #### 注册 AppKey 和配置清单文件 前往 [高德开放平台](https://lbs.amap.com/) 登录账号并按照指引完成 API Key 的申请流程。获得合法密钥后将其填入至 AndroidManifest.xml 文件内的 `<application>` 标签内作为 meta-data 参数传递给 SDK 使用: ```xml <meta-data android:name="com.amap.api.v2.apikey" android:value="${AMAP_API_KEY}"/> <!-- 如果还需要其他权限或组件设置 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> ... ``` 同时记得更新 local.properties 或者 gradle.properties 文件定义环境变量 AMAP_API_KEY ,以便于编译期间替换占位符 `${AMAP_API_KEY}` : ```properties #local.properties or gradle.properties AMAP_API_KEY=your_actual_api_key_here ``` #### 解决常见错误 如果遇到诸如 INVALID_USER_SCODE 类型的异常情况,通常是因为上述某些步骤中的参数不匹配所引起的。此时应当仔细核对已填写的各项数据准确性,并参照官方文档进一步排查可能存在的遗漏之处。 #### 测试集成效果 一切准备就绪以后就可以编写简单的 Dart 代码测试是否可以正常调用高德位置服务API了。例如初始化定位客户端实例以及请求当前位置信息等基本操作均可以在官方提供的示例基础上修改实现。 ```dart import 'package:flutter/material.dart'; import 'package:amap_flutter_location/amap_flutter_location.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('Amap Location Test')), body: Center(child: ElevatedButton(onPressed: _getLocation, child: Text('Get Current Position'))), ), ); } void _getLocation() async { try { final location = await AMapLocationClient.getLocation(); print(location); } catch (e) { print(e.toString()); } } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值