一、申请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++
;希望对后面遇到此问题的小伙伴有所帮助,