百度地图flutter配置

5

百度

文档

https://lbsyun.baidu.com/faq/api?title=flutter/loc

控制台

https://lbsyun.baidu.com/apiconsole/center

Flutter插件

  flutter_bmflocation: ^3.8.2
  flutter_baidu_mapapi_base: ^3.9.5
  flutter_baidu_mapapi_map: ^3.9.5
  flutter_baidu_mapapi_search: ^3.9.5
  flutter_baidu_mapapi_utils: ^3.9.5
  permission_handler: ^12.0.1

安卓

申请权限

    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!-- 访问网络,网络定位需要上网 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- 允许访问振动设备 -->
    <uses-permission android:name="android.permission.VIBRATE"/>
    <!-- 允许使用PowerManager的 WakeLocks保持进程在休眠时从屏幕消失 -->
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <!-- 允许程序读取或写入系统设置 -->
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <!-- android 9.0上使用前台服务,需要添加权限 -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <!-- 用于读取手机当前的状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 读取缓存数据 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

在src下MainActivity.kt同级目录下创建MainApplication.kt

package 你的包名

import com.baidu.mapapi.base.BmfMapApplication

class MyApplication : BmfMapApplication() {
    override fun onCreate() {
        super.onCreate()
    }
}

在AndroidManifest.xml

manifest标签下增加

<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
<uses-permission android:name="android.permission.INTERNET" />

在application标签下增加

<meta-data
    android:name="com.baidu.lbsapi.API_KEY"
    android:value="你的密钥" />

在android/app/build.gradle.kts中增加

android {
    ...
    defaultConfig {
        ...
        // 👇 自定义 Application
        manifestPlaceholders.put("applicationName", "com.kelifangtech.unityshield.MyApplication")
    }
}

配置你的应用签名android/app/build.gradle.kts 将签名文件防止在android目录下

android {
    ...
    signingConfigs {
        create("release") {
            storeFile = file("../app.jks") // 签名文件(keystore/jks)的路径
            storePassword = "xxx" // keystore 密码
            keyAlias = "app" // keystore 内的 key 别名
            keyPassword = "xxx" // key 的密码
        }
    }

    buildTypes {
        release {
            signingConfig = signingConfigs.getByName("release")
            // 添加防混淆配置
            proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro")
        }
        debug {
            signingConfig = signingConfigs.getByName("release") // 确保开发和调试使用一致的签名,方便调试
        }
    }
}

在android/app/proguard-rules.pro文件中写入

-keep class com.baidu.location.** {*;}

参考文档 https://lbsyun.baidu.com/faq/api?title=android-locsdk/guide/addition-func/obfuscation