一.注册和获取秘钥
1.获取 SHA1
在获取Android签名证书的sha1值获取使用keytool时,出现了'keytool' 不是内部或外部命令,也不是可运行的程序 或批处理文件的错误
找到keytool.exe的位置
获得 SHA1
2.获取项目AK码(百度地图 SDK开发密钥的申请地址为:https://lbs.baidu.com/apiconsole/key)
进入百度地图开放平台,控制台创建应用
在我的应用中,查看自己的AK码
二.Android Studio配置
官方文档给出的网址:androidsdk | 百度地图API SDK
下载后解压,将解压后libs文件夹下面的文件全部复制到中的libs中
右键libs中的压缩包,选择Add As Library
三.显示地图
在 <application>
中加入如下代码配置开发密钥(AK):
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="自己的开发密钥(AK)" />
在 <application/>
外部添加如下权限声明:
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->
<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.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
MainActivity:
public class MainActivity extends AppCompatActivity { private MapView mMapView; private BaiduMap mBaiduMap; private LocationClient mLocationClient; private TextView mtextView; // 是否是第一次定位 private boolean isFirstLocate = true; // 当前定位模式 private MyLocationConfiguration.LocationMode locationMode; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); } else { requestLocation(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: if (grantResults[0] != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "Without Location Permissions!", Toast.LENGTH_SHORT).show(); finish(); } else { Toast.makeText(this, "Got Location Permissions!", Toast.LENGTH_SHORT).show(); requestLocation(); } break; } } private void requestLocation() { setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = findViewById(R.id.bmapView); //获取文本显示控件 mtextView = findViewById(R.id.text1); // 得到地图 mBaiduMap = mMapView.getMap(); // 开启定位图层 mBaiduMap.setMyLocationEnabled(true); //定位初始化 mLocationClient = new LocationClient(this); //通过LocationClientOption设置LocationClient相关参数 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打开gps option.setCoorType("bd09ll"); // 设置坐标类型 option.setScanSpan(1000); //设置locationClientOption mLocationClient.setLocOption(option); //注册LocationListener监听器 MyLocationListener myLocationListener = new MyLocationListener(); mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(MyLocationConfiguration.LocationMode.FOLLOWING,true,null,0,0) ); mLocationClient.registerLocationListener(myLocationListener); //开启地图定位图层 mLocationClient.start(); } // 继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView public class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { //mapView 销毁后不在处理新接收的位置 if (location == null || mMapView == null) { return; } // 如果是第一次定位 LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); if (isFirstLocate) { isFirstLocate = false; //给地图设置状态 mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(ll)); } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(location.getDirection()).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); //获取经纬度 StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("\n经度:" + location.getLatitude()); stringBuilder.append("\n纬度:"+ location.getLongitude()); mtextView.setText(stringBuilder.toString()); } } @Override protected void onResume() { mMapView.onResume(); super.onResume(); } @Override protected void onPause() { mMapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mLocationClient.stop(); mBaiduMap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView = null; super.onDestroy(); } } 结果:
代码: