文章目录
- 一、使用百度定位
- 二、获取经纬度
- 使用百度地图
- 移动到我的位置并让“我”显示在地图上
Android Studio中没有signingReport文件,解决参考文档
一、使用百度定位
下载百度LBS开放平台的SDK
在项目的app.gradle文件下添加依赖:implementation fileTree(dir:'libs',includes: ['*.jar'])
将libs目录下所有以.jar结尾的文件添加到当前项目的引用中。
在application标签内部添加一个meta-data标签,name部分是固定的,value部分填申请到的API Key,注册一个LBS SDK中的服务。
<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="XF4604XT2ckrjudssO6z1JJOcKX1J1VE"/>
<service android:name="com.baidu.location.f" android:enabled="true"android:process=":remote"/>
二、获取经纬度
参考博客
创建LocationClient实例,定位的结果会回调到注册的监听器中。
public class MyLocationListener implements BDLocationListener {@Overridepublic void onReceiveLocation(BDLocation bdLocation) {if (bdLocation.getLocType() == BDLocation.TypeGpsLocation || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){navigatiTo(bdLocation);}runOnUiThread(new Runnable() {@Overridepublic void run() {StringBuilder currentPosition = new StringBuilder();currentPosition.append("纬度:").append(bdLocation.getLatitude()).append("\n");currentPosition.append("经度:").append(bdLocation.getLongitude()).append("\n");currentPosition.append("国家:").append(bdLocation.getCountry()).append("\n");currentPosition.append("省:").append(bdLocation.getProvince()).append("\n");currentPosition.append("市:").append(bdLocation.getCity()).append("\n");currentPosition.append("区:").append(bdLocation.getDistrict()).append("\n");currentPosition.append("街道:").append(bdLocation.getStreet()).append("\n");currentPosition.append("定位方式:");if (bdLocation.getLocType() == BDLocation.TypeGpsLocation){currentPosition.append("GPS");}else if (bdLocation.getLocType() ==BDLocation.TypeNetWorkLocation){currentPosition.append("网络");}positionText.setText(currentPosition);}});}}
使用百度地图
使用百度地图提供的自定义控件MapView
<com.baidu.mapapi.map.MapViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/bmapView"android:clickable="true"/>
重写以下三个方法,对MapView进行管理,以保证资源能够得到及时的释放。
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
// SDKInitializer.setAgreePrivacy(getApplicationContext(), true);try {//在使用SDK各组件之前初始化context信息,传入ApplicationContextSDKInitializer.initialize(getApplicationContext());...}@Overrideprotected void onResume() {super.onResume();mapView.onResume();}@Overrideprotected void onPause() {super.onPause();mapView.onPause();}@Overrideprotected void onDestroy() {super.onDestroy();mLocationClient.stop();mapView.onDestroy();baiduMap.setMyLocationEnabled(false);}
移动到我的位置并让“我”显示在地图上
BaiduMap类是地图的总控制器,调用MapView的getMap方法就能获取BaiduMap类的实例,使用MapStatusUpdate 进行缩放。
private void navigatiTo(BDLocation location){if(isFirstLocate){LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);baiduMap.animateMapStatus(update);update = MapStatusUpdateFactory.zoomTo(16f);baiduMap.animateMapStatus(update);isFirstLocate = false;}
// 让“我”显示在地图上MyLocationData.Builder locationBuilder = new MyLocationData.Builder();locationBuilder.latitude(location.getLatitude());locationBuilder.longitude(location.getLongitude());MyLocationData locationData = locationBuilder.build();baiduMap.setMyLocationData(locationData);
}