定位集成
配置高德定位依賴庫
新建 Flutter 項目陆蟆,使用 Android Studio 打開項目里的 android 工程叠殷,或者右鍵 android 目錄-> flutter -> open Android module in Android Studio林束。
在 Android 工程里壶冒,切換為 Android 視圖:
打開 build.gradle 文件,添加定位依賴包:
implementation('com.amap.api:location:5.2.0')
點擊 Sync Now 或者 工具欄上的??圖標(biāo)同步依賴包:
打開清單文件AndroidManifest.xml
,配置權(quán)限和服務(wù):
<!--訪問網(wǎng)絡(luò)-->
<uses-permission android:name="android.permission.INTERNET" />
<!--粗略定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--精確定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--申請調(diào)用A-GPS模塊-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!--用于獲取運營商信息记罚,用于支持提供運營商信息相關(guān)的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--用于訪問wifi網(wǎng)絡(luò)信息桐智,wifi信息會用于進行網(wǎng)絡(luò)定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--用于獲取wifi的獲取權(quán)限荐吉,wifi信息會用來進行網(wǎng)絡(luò)定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--用于讀取手機當(dāng)前的狀態(tài)-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--用于寫入緩存數(shù)據(jù)到擴展存儲卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 配置定位Service -->
<service android:name="com.amap.api.location.APSService"/>
配置簽名文件
高德平臺需要簽名的 sha1 穿撮,所以需要配置簽名文件,debug 模式調(diào)試和正式包各需要一個攻礼,也可以使用同一個 keystore 。
工具欄 Build -> Generate Signed Bundle / APK -> 選擇 APK -> Next -> Create new 栗柒,打開 New Key Store 窗口:
key store path 選擇當(dāng)前項目根目錄或者你喜歡的任何目錄礁扮,命名為 debug.keystore 或者你喜歡的名字,兩個地方的 Password 可以一樣瞬沦,Alias 需要填寫太伊,下面的 Certificate 填寫一項即可:
點擊 ok -> 點擊 Next,選擇 debug 逛钻,當(dāng)然如果 debug 和 release 使用同一個簽名文件的話也可同時選擇 debug 和 release僚焦,并勾選 V2 簽名:
完成后可以看到項目里的 debug.keystore 文件:
重復(fù)上面方法,再創(chuàng)建一個 release.keystore 文件曙痘。點擊 Project Structure:
選擇 Modules -> app -> Signing Configs -> + -> 默認有 debug,再添加一個 release 罢洲,分別選擇對應(yīng)的 keystore:
點擊 ok 后再次打開 build.gradle 文件耸峭,可以看到簽名配置對應(yīng)剛才配置的簽名文件:
signingConfigs {
debug {
storeFile file('/Users/apple/AndroidStudioProjects/flutter/map_demo/android/debug.keystore')
storePassword '123456'
keyAlias 'amap'
keyPassword '123456'
}
release {
storeFile file('/Users/apple/AndroidStudioProjects/flutter/map_demo/android/release.keytore')
storePassword '123456'
keyAlias 'amap'
keyPassword '123456'
}
}
高德平臺 Key 申請
打開高德開放平臺 | 高德地圖API (amap.com)本涕,注冊成為高德開放平臺用戶样漆,打開控制臺創(chuàng)建一個應(yīng)用,填入對應(yīng)的信息鞋喇,這里有個錯誤执桌,SHA1 其實是 MD5 ,不要填寫 SHA1错蝴。
獲取MD5:
在剛才的項目里官紫,打開 Terminal,輸入下面命令,路徑就是 debug.keystore 和 release.keystore的路徑:
keytool -list -v -keystore ./debug.keystore
輸入秘鑰庫口令,就是設(shè)置的 Password ,復(fù)制 MD5 ,去高德開放平臺粘貼。
發(fā)布版和調(diào)試版都設(shè)置后,復(fù)制 key 。
在清單文件里睦优,配置apikey
:
<!-- 配置定位Service -->
<service android:name="com.amap.api.location.APSService"/>
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="f6c46787c43cb7df5510d9f4c530fd1e"/>
Flutter 文件配置
回到 Flutter 項目隐孽,添加高德定位庫和權(quán)限申請依賴,執(zhí)行pub get
:
amap_flutter_location: ^2.0.0
permission_handler:
在獲取定位的入口配置權(quán)限申請,注冊監(jiān)聽:
/// 動態(tài)申請定位權(quán)限
requestPermission();
///注冊定位結(jié)果監(jiān)聽
_locationListener = _locationPlugin
.onLocationChanged()
.listen((Map<String, Object> result) {
setState(() {
_locationResult = result;
});
});
只要獲取到定位晴及,這里都會回調(diào),result
包含了很全的定位信息。
如果運行報錯:INVALID_USER_KEY
,說明你的 keystore 的 MD5 不正確,也許平臺會把 SHA1 改為真正的 SHA1 且改,所以不妨試試填入 SHA1效扫。
地圖集成
Android工程添加地圖依賴
回到 Android 工程,添加地圖依賴:
implementation 'com.amap.api:3dmap:5.0.0'
回到 Flutter 工程,在pubspec.yaml
里添加插件依賴:
amap_flutter_map: ^2.0.1
在布局中使用 map :
final AMapWidget map = AMapWidget(
onMapCreated: onMapCreated,
// 定位小藍點配置
myLocationStyleOptions: MyLocationStyleOptions(true),
// 是否指南針
// compassEnabled: true,
);