Android开发调用百度地图接口实现定位服务

代码地址:https://gitee.com/chen_yuan_fan/androidkaifa.git

MainActivity:

package com.example.map1;


import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;

public class MainActivity extends AppCompatActivity {

    private MapView mapView;
    private BaiduMap baiduMap;
    private TextView postionText;
    private boolean isFirstLocate = true;
    private LocationClient mLocationClient;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mLocationClient = new LocationClient(getApplicationContext());//创建Location实例并接受Context参数
        mLocationClient.registerLocationListener(new MyLocationListener());//注册定位监视器,接受位置信息时会回调到该监视器
        SDKInitializer.initialize(this.getApplicationContext());//初始化操作,传入Context
        setContentView(R.layout.activity_main);
        postionText = (TextView) findViewById(R.id.position_text_view);
        mapView = (MapView) findViewById(R.id.mmapview);
        baiduMap = mapView.getMap();
        baiduMap.setMyLocationEnabled(true);//显示当地位置
        mLocationClient.start();//开始定位,定位成功后会回调到监视器
        initLocation();


    }

    private void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setCoorType("bd09ll");//直接返回Bi0911坐标系,避免地图纠偏
        option.setScanSpan(5000);//每隔5000毫秒更新一次定位信息
        option.setLocationMode(LocationClientOption.LocationMode.Device_Sensors);//强制GPS
        option.setIsNeedAddress(true);//需要精确的信息
        mLocationClient.setLocOption(option);
    }

    @Override
    protected void onResume() {
        mapView.onResume();
        super.onResume();
    }

    @Override
    protected void onPause() {
        mapView.onPause();
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        mLocationClient.stop();
        baiduMap.setMyLocationEnabled(false);
        mapView.onDestroy();
        mapView = null;
        super.onDestroy();
    }
    class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            if (bdLocation.getLocType() == bdLocation.TypeGpsLocation || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
                navigateTo(bdLocation);
            }
            StringBuilder currentPostion = new StringBuilder();
            currentPostion.append("纬度:").append(bdLocation.getLatitude()).append("\n");//将经纬度信息转化为国家/省份/城市等信息
            currentPostion.append("经度:").append(bdLocation.getLongitude()).append("\n");
            currentPostion.append("国家:").append(bdLocation.getCountry()).append("\n");
            currentPostion.append("省:").append(bdLocation.getProvince()).append("\n");
            currentPostion.append("市:").append(bdLocation.getCity()).append("\n");
            currentPostion.append("区:").append(bdLocation.getDistrict()).append("\n");
            currentPostion.append("街道:").append(bdLocation.getStreet()).append("\n");
            if (bdLocation.getLocType() == bdLocation.TypeGpsLocation) {//判断定位的类型
                currentPostion.append("GPS");
            } else if (bdLocation.getLocType() == BDLocation.TypeNetWorkLocation) {
                currentPostion.append("网络");
            } else {
                currentPostion.append("无");
            }
            postionText.setText(currentPostion);
        }
    }
    private void navigateTo(BDLocation location) {//显示自己在地图上的位置
        if (isFirstLocate) {
            LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());//存储经纬度到LatLng
            MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
            baiduMap.animateMapStatus(update);//显示我所在的区域
            update = MapStatusUpdateFactory.zoomTo(16f);//地图显示的缩放级别
            baiduMap.animateMapStatus(update);//传入到经纬度
            isFirstLocate = false;//防止多次调用
        }
        MyLocationData.Builder locationBuilder = new MyLocationData.Builder();//将经纬度信息存储到 Builder中
        locationBuilder.latitude(location.getLatitude());
        locationBuilder.longitude(location.getLongitude());
        MyLocationData locationData = locationBuilder.build();
        baiduMap.setMyLocationData(locationData);//将我的位置显示出来
    }



}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.baidu.mapapi.map.MapView
        android:id="@+id/mmapview"
        android:layout_width="410dp"
        android:layout_height="658dp"
        android:clickable="true"
        app:layout_constraintEnd_toEndOf="parent"
        tools:ignore="MissingConstraints"
        tools:layout_editor_absoluteY="73dp"></com.baidu.mapapi.map.MapView>

    <TextView
        android:id="@+id/position_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

 

posted @ 2020-05-25 22:56  chenyuan#  阅读(411)  评论(0编辑  收藏  举报