一、申請APIkey
前往 https://lbs.amap.com/api/android-sdk/guide/create-project/get-key 申請APIkey,新建一個應用,分別添加key,其中要獲取SHA1值。
-
Mac下AndroidStudio獲取SHA1值:
第一步、打開Android Studio的Terminal工具;
第一步、輸入命令:cd ~/.android ;
第二步、輸入命令:keytool -list -v -keystore debug.keystore ;
第四步、輸入Keystore密碼,一般直接回車就行,或者輸入android。
這里就獲取到SHA1值,就可以在高德地圖后台申請APIkey了。
而packageName就在build.gradle(app)里,取applicationId。
二、配置集成高德地圖
依賴
amap_base: ^0.3.5
IOS配置
ios-Runner-info.plist添加
<string>需要用到定位</string> <key>UIBackgroundModes</key> <array> <string>location</string> </array>
Android配置,在build.gradle(app)中添加AMAP_KEY即可。
android { .... 你的代碼 defaultConfig { ..... manifestPlaceholders = [ AMAP_KEY : "aa9f0cf8574400f2af0078392c556e25", /// 高德地圖key ] multiDexEnabled true
}
dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' //高德 implementation "com.amap.api:location:latest.integration" }
添加 implementation "com.amap.api:location:latest.integration"
在 application 添加
<meta-data android:name="com.amap.api.v2.apikey" android:value="你的key"/>
在application外
<uses-permission android:name="android.permission.INTERNET" /> <!--用於進行網絡定位--> <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> <!--這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!--用於訪問網絡,網絡定位需要上網--> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <!--用於申請調用A-GPS模塊--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
main添加AMap.init('1a83798190514cf82dbe799d6d4ac71c');
void main() async{ AMap.init('1a83798190514cf82dbe799d6d4ac71c'); var userState = UserState(); var providers = Providers(); var counter = Counter(); providers //多個狀態的管理 ..provide(Provider<Counter>.value(counter)) ..provide(Provider<UserState>.value(userState)); //runApp(MyApp()); runApp( ProviderNode( child: MyApp(), providers: providers, ), ); }
主要代碼

獲取當前定位
final _amapLocation = AMapLocation(); var _result = ''; //初始化定位監聽 void _initLocation() async { _amapLocation.init(); final options = LocationClientOptions( isOnceLocation: false, locatingWithReGeocode: true, ); if (await Permissions().requestPermission()) { _amapLocation.startLocate(options).listen((_) => setState(() { _result = '坐標:${_.longitude},${_.latitude} @ ${DateTime.now().hour}:${DateTime.now().minute}:${DateTime.now().second}'; })); } else { setState(() { _result = "無定位權限"; }); } }
關閉定位
最后在dispose中關閉定位,防止內存泄漏
@override void dispose() { //注意這里關閉 _amapLocation.stopLocate(); super.dispose(); }
ios編譯報錯
終於解決了,不用加use_framework!,直接用Xcode打開項目click Runner > Tagets > Runner > Build Settings>All, search Compile Sources As
, change the value to Objective-C++
;希望對后面遇到此問題的小伙伴有所幫助,