flutter 实现Android端百度地图定位

1、先在百度地图官网申请百度地图AK 百度地图开放平台 | 百度地图API SDK | 地图开发

2、安装flutter百度地图插件

 #百度定位
  flutter_bmflocation: ^1.0.4
  #权限申请
  permission_handler: ^5.1.0

3、 配置AndroidManifest.xml

<!--这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 用于访问wifi网络信息-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<meta-data
    android:name="com.baidu.lbsapi.API_KEY"
    android:value="百度地图ak" />

4、主要代码:

import 'package:flutter/material.dart';
//消息提示
import 'package:fluttertoast/fluttertoast.dart'; 
import 'package:flutter_bmflocation/bdmap_location_flutter_plugin.dart';
import 'package:flutter_bmflocation/flutter_baidu_location.dart';
import 'package:flutter_bmflocation/flutter_baidu_location_android_option.dart';
import 'package:flutter_bmflocation/flutter_baidu_location_ios_option.dart';


class _DetailItemLocationState extends State<DetailItemLocation> {
    
  LocationFlutterPlugin _locationPlugin = new LocationFlutterPlugin();
  //ios定位参数设置
  BaiduLocationIOSOption iosOption = new BaiduLocationIOSOption();
  BaiduLocationAndroidOption androidOption = new BaiduLocationAndroidOption();
  BaiduLocation _baiduLocation;
  var _locationListener;

  @override
  void initState() {
    super.initState();
    /// 设置ios端ak
    LocationFlutterPlugin.setApiKey("百度地图ak");
    _locationListener =
        _locationPlugin.onResultCallback().listen((Map<String, Object> result) {
          setState(() {
            try {
              _baiduLocation = BaiduLocation.fromMap(result);
              print(_baiduLocation);//定位的结果
                ... //这边写你定位后的处理逻辑
              _stopLocation(); //可以不要,不要的话是隔一段时间定位一次(根据你的参数配置),
            } catch (e) {
              print(e);
            }
          });
        });
  }

    
  @override
  void dispose() {
    super.dispose();
     //组件销毁取消监听
    if (null != _locationListener) {
      _locationListener.cancel();
    }
  }
  


//  设置定位参数
  void _setLocOption(){
    androidOption.setCoorType("bd09ll"); // 设置返回的位置坐标系类型
    androidOption.setIsNeedAltitude(true); // 设置是否需要返回海拔高度信息
    androidOption.setIsNeedAddres(true); // 设置是否需要返回地址信息
    androidOption.setIsNeedLocationPoiList(true); // 设置是否需要返回周边poi信息
    androidOption.setIsNeedNewVersionRgc(true); // 设置是否需要返回最新版本rgc信息
    androidOption.setIsNeedLocationDescribe(true); // 设置是否需要返回位置描述
    androidOption.setOpenGps(true); // 设置是否需要使用gps
    androidOption.setLocationMode(LocationMode.Hight_Accuracy); // 设置定位模式
    androidOption.setScanspan(1000); // 设置发起定位请求时间间隔
    Map androidMap = androidOption.getMap();
    Map iosdMap = iosOption.getMap();
    _locationPlugin.prepareLoc(androidMap,iosdMap); //ios和安卓定位设置
  }


//  开始定位
  void _startLocation(){
    if (null != _locationPlugin) {
     
      //申请定位权限
      requestPermission().then((value)=>{
        if(value){
          _setLocOption(),
          _locationPlugin.startLocation()
        }else {
          Fluttertoast.showToast(msg: '需要定位权限!')
        }
      });

    }
  }

  //  申请权限
  Future<bool> requestPermission() async {
    // 申请权限
    final status = await Permission.location.request();
    if (status.isGranted) {
      print("定位权限申请通过");
      return true;
    } else {
      print("定位权限申请不通过");
      return false;
    }
  }

  /// 停止定位
  void _stopLocation() {
    if (null != _locationPlugin) {
      _locationPlugin.stopLocation();
    }
  }


}

在需要定位的地方调用 _startLocation 方法就可以了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值