文章目录
- 一、使用百度定位
- 二、获取经纬度
- 使用百度地图
- 移动到我的位置并让“我”显示在地图上
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-data
android: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 {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
if (bdLocation.getLocType() == BDLocation.TypeGpsLocation || bdLocation.getLocType() == BDLocation.TypeNetWorkLocation){
navigatiTo(bdLocation);
}
runOnUiThread(new Runnable() {
@Override
public 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.MapView
android: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信息,传入ApplicationContext
SDKInitializer.initialize(getApplicationContext());
...
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected 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);
}