Flutter -amap_base調用高德地圖


一、申請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,
    ),
  );
}

主要代碼

View Code

 

獲取當前定位

  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++;希望對后面遇到此問題的小伙伴有所幫助,

參考:https://github.com/shaqian/flutter_tflite/issues/7,

參考:https://github.com/boomcx/amap_map


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM