首先需要注册百度地图的开发者账号,选择个人开发者就可以。百度地图开放平台 | 百度地图API SDK | 地图开发 ()
然后获取AK这个在网上都有可以自己查看。下载、配置sdk可以参考下面的官方文档Android定位SDK - Android Studio配置 | 百度地图API SDK ()
代码参考Android定位SDK | 百度地图API SDK ()
首先需要在Manifest.xml文件中的<application></application>代码块中间添加下面以上东西。
<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="你申请到的密钥" /><serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote"></service>
与<application></application>同级添加以下权限
<!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 --><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><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><!-- 获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><!-- 访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET"></uses-permission>
布局文件如下
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="/apk/res/android"xmlns:app="/apk/res-auto"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".NearMapActivity"><com.baidu.mapapi.map.MapViewandroid:id="@+id/NbmapView"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#e0000000"android:orientation="vertical" ><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="20dp"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="纬度:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Lat"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="经度:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Lon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:orientation="horizontal" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="地址:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout></LinearLayout></FrameLayout>
activity文件
package com.jsut.helloworld;import android.os.Bundle;import android.widget.TextView;import com.baidu.location.BDAbstractLocationListener;import com.baidu.location.BDLocation;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;import androidx.appcompat.app.AppCompatActivity;public class NearMapActivity extends AppCompatActivity {private MapView nmMapView = null;//Android Widget地图控件private BaiduMap nmBaiduMap;private LocationClient nmLocationClient;//定位客户端private boolean ifFirst = true; // 是否放大层级TextView tv_Lat; //纬度TextView tv_Lon; //经度TextView tv_Add; //地址@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);LocationClient.setAgreePrivacy(true);setContentView(R.layout.activity_near_map);//绑定组件nmMapView = (MapView) findViewById(R.id.NbmapView);nmBaiduMap = nmMapView.getMap();tv_Lat = findViewById(R.id.tv_Lat);tv_Lon = findViewById(R.id.tv_Lon);tv_Add = findViewById(R.id.tv_Add);// 开启地图的定位图层nmBaiduMap.setMyLocationEnabled(true);//定位初始化try {nmLocationClient = new LocationClient(this);} catch (Exception e) {e.printStackTrace();}//通过LocationClientOption设置LocationClient相关参数LocationClientOption option = new LocationClientOption();option.setOpenGps(true); // 打开gpsoption.setCoorType("bd09ll"); // 设置坐标类型//设置扫描时间间隔option.setScanSpan(1000);//设置定位模式option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//设置需要地址信息option.setIsNeedAddress(true);//保存定位参数nmLocationClient.setLocOption(option);//设置locationClientOptionnmLocationClient.setLocOption(option);//注册LocationListener监听器MyLocationListener myLocationListener = new MyLocationListener();nmLocationClient.registerLocationListener(myLocationListener);//开启地图定位图层nmLocationClient.start();}public class MyLocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 销毁后不在处理新接收的位置if (location == null || nmMapView == null){return;}tv_Lat.setText(location.getLatitude()+"");tv_Lon.setText(location.getLongitude()+"");tv_Add.setText(location.getAddrStr());MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此处设置开发者获取到的方向信息,顺时针0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();nmBaiduMap.setMyLocationData(locData);//第一次定位if (ifFirst) {LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());MapStatus.Builder builder = new MapStatus.Builder();builder.target(ll);builder.zoom(20.0f); // 放大为20层级nmBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));//放大层级ifFirst = false;}}}@Overrideprotected void onResume() {nmMapView.onResume();super.onResume();}@Overrideprotected void onPause() {nmMapView.onPause();super.onPause();}@Overrideprotected void onDestroy() {nmLocationClient.stop();nmBaiduMap.setMyLocationEnabled(false);nmMapView.onDestroy();nmMapView = null;super.onDestroy();}}
参考的其他文档有:
简单调用Android百度地图API SDK并显示所在定位_laonanhai0902的博客-CSDN博客
Android 百度地图定位显示当前位置_虚言假面的博客-CSDN博客_android 百度定位
Android实现百度地图定位服务_amsx的博客-CSDN博客_android 百度定位