用androidstudio开发百度定位功能

778 阅读2分钟

一.申请自己应用的密钥 这里参考官方文档来操作,链接如下

lbsyun.baidu.com/index.php?t…

二.显示地图

这里我们要建立自己的application类来显示自己的地图(自己的application类要继承官方的application类)

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        SDKInitializer.initialize(this);
        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType( CoordType.BD09LL);
    }
}

三.创建自己的位置监听类

public class MyLocationListener extends BDAbstractLocationListener {
    private MapView mMapView;
    private BaiduMap mBaiduMap;
    private boolean isFirstLocate = true;
    public MyLocationListener(BaiduMap mBaiduMap,MapView mMapView){
        this.mBaiduMap=mBaiduMap;
        this.mMapView=mMapView;


    }
    @Override

    public void onReceiveLocation(BDLocation location) {
        //mapView 销毁后不在处理新接收的位置
        LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
        if (isFirstLocate) {

            isFirstLocate = false;
            //给地图设置状态
            mBaiduMap.animateMapStatus( MapStatusUpdateFactory.newLatLng(ll));
        }
        if (location == null || mMapView == null){
            return;
        }
        MyLocationData locData = new MyLocationData.Builder()
                .accuracy(location.getRadius())
                // 此处设置开发者获取到的方向信息,顺时针0-360
                .direction(location.getDirection()).latitude(location.getLatitude())
                .longitude(location.getLongitude()).build();
        mBaiduMap.setMyLocationData(locData);
    }

注意这里的代码是初始化地图的

LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
if (isFirstLocate) {

    isFirstLocate = false;
    //给地图设置状态
    mBaiduMap.animateMapStatus( MapStatusUpdateFactory.newLatLng(ll));
}

四.activity或fragment中的使用

public class fxfrgment extends Fragment {
    private MapView mMapView = null;
    private BaiduMap mBaiduMap=null;
    private LocationClient mLocationClient=null;
    private boolean isFirstLocate = true;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate ( savedInstanceState );


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate ( R.layout.fragment_fxfrgment, container, false );
        mMapView = (MapView) view.findViewById ( R.id.Map );

        mBaiduMap = mMapView.getMap();
//普通地图 ,mBaiduMap是地图控制器对象
        mBaiduMap.setMyLocationEnabled ( true );
        mLocationClient=new LocationClient ( mMapView.getContext ());
        LocationClientOption option = new LocationClientOption ();
        option.setOpenGps(true); // 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(1000);

//设置locationClientOption
        mLocationClient.setLocOption(option);

//注册LocationListener监听器
        MyLocationListener myLocationListener = new MyLocationListener(mBaiduMap,mMapView);
        mLocationClient.registerLocationListener(myLocationListener);
//开启地图定位图层
        mLocationClient.start();
        return  view;
    }

    @Override
    public void onResume() {
        mMapView.onResume();
        super.onResume ();

    }

    @Override
    public void onPause() {
        mMapView.onPause ();
        super.onPause ();

    }

    @Override
    public void onDestroy() {
        mLocationClient.stop();
        mBaiduMap.setMyLocationEnabled(false);
        mMapView.onDestroy();
        mMapView = null;
        super.onDestroy ();

    }

这里我是在Fragment中使用的。

五.效果图片

Screenshot_2021-12-04-14-30-41-239_com.example.my.jpg (这是在真机上调试的效果)

六.源码

源代码 · a407859 · 谢俊龙/xieqiaofeng - Gitee.com