发布时间:2025-06-24 18:13:45 作者:北方职教升学中心 阅读量:230
在国内一般无法使用location提供的谷歌定位功能,所以只能选择百度地图或者高德地图提供的定位服务
1-申请AK
1-百度地图官网:flutter | 百度地图API SDK (baidu.com)
控制台 | 百度地图开放平台 (baidu.com)
2-根据提示进行认证,认证成功后跳转如下页面
3-填写应用名称和类型
4-输入以下内容SHA1和PackageName
获取包名:
获取SHA1:
1-打开cmd,输入cd .android
报错:
原因:jdk的路径没有保存进path中
找到自己的jdk文件,将路径 E:/java/jdk/bin存在PATH即可
关闭命令管理器,重新打开
输入cd .android
2-输入口令
调试版本默认密码是: android,发布模式的密码是apk的keystore设置的密码,没有直接回车
如果发现没有SHA1
解决方案
1.生成新的调试密匙
keytool -genkey -v -keystore new_debug.keystore -storepass your_password -keyalg RSA -keysize 2048 -validity 10000 -alias androiddebugkey
2-执行以下命令获取调试密匙
keytool -list -v -keystore new_debug.keystore -alias androiddebugkey
3-提交
5-获取AK成功
flutter | 百度地图API SDK (baidu.com)
2-SDK相关配置
申请Ak成功后,就可以进行如下操作了
1-在pubspec.yaml文件中引入以下依赖
flutter_baidu_mapapi_map: ^3.0.0+2 flutter_baidu_mapapi_search: 3.2.0 flutter_bmflocation: 3.2.1
2-在终端输入flutter pub get
如果没有报错信息,即可进行下一步
如果有报错信息,检查一下是不是版本冲突的问题,我的sdk是2.19.6
3-打开android/app/src/main/java/com/example/envcapp/,新建一个java文件,命名为MyApplication
写入以下代码,改一下包名
package com.example.envcapp;// import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.base.BmfMapApplication;import io.flutter.app.FlutterApplication;public class MyApplication extends BmfMapApplication { @Override public void onCreate() { super.onCreate(); }}
4-打开android/app/src/main/AndroidManifest.xml
1-将name改为MyApplication
2-引入权限
<!-- 这个权限用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 用于读取手机当前的状态--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET" /> <!-- 读取系统信息,包含系统版本等信息,用作统计--> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <!-- 程序在手机屏幕关闭后后台进程仍然运行--> <uses-permission android:name="android.permission.WAKE_LOCK" />
3-在下引入key
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="你的百度key" />
5-打开android/app/build-gradle
引入以下代码
buildTypes { release { signingConfig signingConfigs.debug proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }
6-在android/app/下新建文件proguard-rules.pro
写入以下代码
-keep class com.baidu.** {*;} -keep class vi.com.** {*;} -keep class com.baidu.vi.** {*;} -dontwarn com.baidu.**
3-创建地图
import 'package:envcapp/pages/Weather.dart';import 'package:flutter/cupertino.dart';import 'package:flutter/material.dart';import 'package:flutter_baidu_mapapi_map/flutter_baidu_mapapi_map.dart';import 'package:flutter_baidu_mapapi_base/src/map/bmf_models.dart';import 'package:flutter_baidu_mapapi_base/flutter_baidu_mapapi_base.dart';import 'package:flutter_baidu_mapapi_search/flutter_baidu_mapapi_search.dart';class WeatherMapPage extends StatefulWidget{ const WeatherMapPage({super.key}); @override State<WeatherMapPage> createState() => WeatherMapState(); }class WeatherMapState extends State<WeatherMapPage>{ BMFMapController? dituController; @override void initState() { super.initState(); } /// 创建完成回调 void onBMFMapCreated(BMFMapController controller) { dituController = controller; /// 地图加载回调 dituController?.setMapDidLoadCallback(callback: () { print('mapDidLoad-地图加载完成!!!'); }); } /// 设置地图参数 BMFMapOptions initMapOptions() { BMFMapOptions mapOptions = BMFMapOptions( center: BMFCoordinate(39.917215, 116.380341), zoomLevel: 12, changeCenterWithDoubleTouchPointEnabled:true, gesturesEnabled:true , scrollEnabled:true , zoomEnabled: true , rotateEnabled :true, compassPosition :BMFPoint(0,0) , showMapScaleBar:false , maxZoomLevel:15, minZoomLevel:8,// mapType: BMFMapType.Satellite ); return mapOptions; } @override Widget build(BuildContext context) { Size screenSize = MediaQuery.of(context).size; return Scaffold( backgroundColor: Color.fromRGBO(240, 243, 250, 1), body: Container( decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), ), child: Stack( children: [ Container( width: screenSize.width, height: screenSize.height, child: BMFMapWidget( onBMFMapCreated: (controller) { onBMFMapCreated(controller); }, mapOptions: initMapOptions(), ), ), Positioned( top: 20, left: 5, child: IconButton( onPressed: (){ Navigator.push(context, MaterialPageRoute(builder: (context) =>const Weather())); }, icon:const Icon(Icons.navigate_before,color: Color.fromRGBO(0, 0, 0, 0.3),size: 40,), ), ) ], ), ) ); }}
有关百度地图遇到的报错可以看我的下一篇文章flutter实战 -- 百度地图报错-CSDN博客