19软34百度地图
注册开发者帐号 创建应用
https://map.baidu.com
网页底部选择地图开放平台
在控制台创建应用
切换到jre的bin目录 测试keytool
将证书直接复制到上面的jre目录
运行 keytool -list -v -keystore debug.keystore
拿到SHA1
- 下载aar文件BaiduLBS_AndroidSDK_Lib.aar 放入到libs目录
- 在build.gradle里面添加 implementation (name: ‘BaiduLBS_AndroidSDK_Lib’, ext:‘aar’)
下载libs压缩包 放在本地项目中
实现定位
机房502的AK
NOIZNSU8o9WDTS6bW55InM1EMhp66UZr
private void startLocation() {
mlocationClient = new LocationClient(MainActivity.this);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setCoorType("bd09ll");
option.setScanSpan(1000);
mlocationClient.setLocOption(option);
MyLocationListener locationListener = new MyLocationListener();
mlocationClient.registerLocationListener(locationListener);
mlocationClient.start();
}
class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
Log.e("MyLocationListener", "onReceiveLocation " + location.toString());
//mapView 销毁后不在处理新接收的位置
if (location == null || mMapView == null){
return;
}
LatLng latLng = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(latLng);
mBaiduMap.animateMapStatus(update);
/**
* 这段代码没有成功移动
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(location.getDirection()).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
*/
}
}
事件处理 添加Marker
package com.example.helloworld;
import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapStatus;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.Marker;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.model.LatLngBounds;
public class MainActivity extends Activity {
private MapView mMapView = null;
private SDKReceiver receiver;
private BaiduMap baiduMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
baiduMap = mMapView.getMap();
// baiduMap.showMapPoi(false);
// baiduMap.setViewPadding(50, 50,50,50);
//latitude: 39.74912325161949, longitude: 116.2356755113062
//latitude: 40.170456794163066, longitude: 116.57820838531589
// LatLng latLng1 = new LatLng(32.74912325161949, 116.2356755113062);
// LatLng latLng2 = new LatLng(40.170456794163066, 116.57820838531589);
// LatLngBounds bounds = new LatLngBounds.Builder().include(latLng1).include(latLng2).build();
// baiduMap.setMapStatus(MapStatusUpdateFactory.newLatLngBounds(bounds));
registerBaiduReceiver();
// 1 地图状态改变
/** baiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() {
@Override
public void onMapStatusChangeStart(MapStatus mapStatus) {
Log.e("onMapStatusChangeStart", mapStatus.toString());
}
@Override
public void onMapStatusChangeStart(MapStatus mapStatus, int i) {
Log.e("onMapStatusChangeStart", mapStatus.toString());
}
@Override
public void onMapStatusChange(MapStatus mapStatus) {
Log.e("onMapStatusChange", mapStatus.toString());
}
@Override
public void onMapStatusChangeFinish(MapStatus mapStatus) {
Log.e("onMapStatusChangeFinish", mapStatus.toString());
}
});*/
// poi = point of intrest
// 2地图单击事件
baiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
Log.e("onMapClick", latLng.toString());
}
@Override
public void onMapPoiClick(MapPoi mapPoi) {
Log.e("onMapPoiClick", mapPoi.getName() + mapPoi.getPosition().toString());
}
});
// 3 地图双击事件
baiduMap.setOnMapDoubleClickListener(new BaiduMap.OnMapDoubleClickListener() {
@Override
public void onMapDoubleClick(LatLng latLng) {
Log.e("onMapDoubleClick", latLng.toString());
}
});
// 4 地图长按事件
baiduMap.setOnMapLongClickListener(new BaiduMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng latLng) {
Log.e("OnMapLongClick", latLng.toString());
// baiduMap.setMapStatus(MapStatusUpdateFactory.zoomBy(-1));
// 添加一个marker
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory
.fromResource(R.drawable.marker);
OverlayOptions options = new MarkerOptions()
.position(latLng)
.icon(bitmapDescriptor);
baiduMap.addOverlay(options);
}
});
// 5.地图marker点击事件
baiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Log.e("onMarkerClick", marker.getTitle());
return false;
}
});
// 6 地图touch事件
baiduMap.setOnMapTouchListener(new BaiduMap.OnMapTouchListener() {
@Override
public void onTouch(MotionEvent motionEvent) {
Log.e("onTouch", motionEvent.toString());
}
});
// 7 地图加载完成
baiduMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
Log.e("onMapLoaded", "地图加载完成");
}
});
// 8 地图渲染完成
baiduMap.setOnMapRenderCallbadk(new BaiduMap.OnMapRenderCallback() {
@Override
public void onMapRenderFinished() {
Log.e("onMapRenderFinished", "地图渲染完成");
}
});
// 9 地图截屏
baiduMap.snapshot(new BaiduMap.SnapshotReadyCallback() {
@Override
public void onSnapshotReady(Bitmap bitmap) {
Log.e("onSnapshotReady", "size = " + bitmap.getByteCount());
}
});
}
// 注册一个监听接受者
private void registerBaiduReceiver() {
receiver = new SDKReceiver();
// 广播过滤器
IntentFilter filter = new IntentFilter();
filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
registerReceiver(receiver, filter);
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
class SDKReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
//key验证失败,做相应处理
Log.e("SDKReceiver", "AK验证失败");
} else if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
//key验证成功,做相应处理
Log.e("SDKReceiver", "AK验证成功");
}
}
}
}
画一个方框
// 画一个方框
LatLng p1 = new LatLng(latLng.latitude + 0.005, latLng.longitude - 0.005);
LatLng p2 = new LatLng(latLng.latitude - 0.005, latLng.longitude - 0.005);
LatLng p3 = new LatLng(latLng.latitude - 0.005, latLng.longitude + 0.005);
LatLng p4 = new LatLng(latLng.latitude + 0.005, latLng.longitude + 0.005);
List<LatLng> points = new ArrayList<LatLng>();
points.add(p1);
points.add(p2);
points.add(p3);
points.add(p4);
points.add(p1);
//设置折线的属性
OverlayOptions mOverlayOptions = new PolylineOptions()
.width(10)
.color(0xAAFF0000)
.points(points);
//在地图上绘制折线
//mPloyline 折线对象
Overlay mPolyline = baiduMap.addOverlay(mOverlayOptions);