android接入百度SDK

xiaoxiao2021-02-28  7

1.配置百度地图开发环境

1.1.下载开发包 1.2配置Demo 1.3配置自己的开发环境:按照开发指南进行配置

2.获取安全码

(开发版sha1,和发布版SHA1值和包名) 开发版SHA1值获取:http://blog.csdn.net/qq_29269233/article/details/53725865 发布版SHA1值获取(其中自己的签名文件为生成apk所在的目录,需要先将自己的项目打包生成apk): http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=112007(发布版) Android 签名证书的sha1值: 包名:需要使用百度地图的应用的包名

注意:自己在写项目的时候用百度地图的时候,开发版和发布版的sha1都配置了,运行的很不错,第二次在写定位的时候,自己懒了点就漏配置了一个sha1值,而且官方文档上也写明了非必填项,结果就出bug了,获取位置经纬度的时候我打印的log,第一次打印正确,第二个log就错误,改了好久一直没找到原因,最后自己去配置之前漏的sha1值就没问题了,以后还是老老实实都配置吧

3.通过获取的sha1和包名获取key

4.创建应用加载百度地图(Hello BaiduMap)

http://lbsyun.baidu.com/index.php?title=androidsdk/guide/hellobaidumap

初始化

//在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext());

5.监听key是否正确,通过广播去验证

//5.监听key private void registerSDKCheckRecerver() { mReceiver=new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action=intent.getAction(); if (SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR.equals(action)){ showToast("网络错误"); }else if(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR.equals(action)){ showToast("key验证失败"); } } }; IntentFilter filter=new IntentFilter(); //监听网络错误 filter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR); //监听百度地图sdk的key是否正确 filter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR); //注册广播 registerReceiver(mReceiver,filter); }

6.MapView与BaiduMap*(重点)*

/** * Created by luuuzi on 2017/9/26. */ public class BaseActivity extends Activity { private String tag="BaseActivity"; public MapView mMapView; BaiduMap baiduMap; //地图状态发生改变 public MapStatusUpdate mMapStatusUpdate; //坐标对象(举例:腾讯大厦坐标:22.5460778801,113.9410619639) //参数1:纬度,参数2:经度 public LatLng tencentPos = new LatLng(22.5460778801, 113.9410619639); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //tag = "HelloBaiduMapActivity"; //到这一步就会显示出地图,是已天安门为中心 mMapView = (MapView) findViewById(R.id.bmapView); //这个方法是给地图设置参数的 baidumapTest(); } private void baidumapTest() { //获取地图控制器,可以获取好多事件监听 baiduMap = mMapView.getMap(); // 1.隐藏缩放按钮,比例尺 //mMapView.showZoomControls(false);//隐藏缩放按钮,默认为显示 //mMapView.showScaleControl(false);//隐藏比例尺按钮,默认是显示的 //通过控制器 float maxZoomLevel = baiduMap.getMaxZoomLevel();//获取地图的最大缩放级别 float minZoomLevel = baiduMap.getMinZoomLevel();//获取地图的最小缩放级别 // 2.获取最小(3),最大缩放级别(22) Log.i(tag, "地图最大缩放级别" + maxZoomLevel + ";地图最小缩放级别:" + minZoomLevel); //09-26 11:46:29.401: I/HelloBaiduMapActivity(30819): 地图最大缩放级别22.0;地图最小缩放级别:3.0 // 3.设置地图中心点 //newLatLng,通过经纬度设置中心位置,参数1():维度,参数2:经度 mMapStatusUpdate = MapStatusUpdateFactory.newLatLng(tencentPos); baiduMap.setMapStatus(mMapStatusUpdate); // // 4.设置地图缩放为15 //zoomBy()是增量,zoomTo()是绝对值 mMapStatusUpdate = MapStatusUpdateFactory.zoomTo(15); baiduMap.setMapStatus(mMapStatusUpdate); // 6.获取地图UI控制器:隐藏指南针 UiSettings uiSetting=baiduMap.getUiSettings(); //不显示指南针 uiSetting.setCompassEnabled(false); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } //自定义的toast public void showToast(CharSequence text){ ToastUtils.showToast(this,text); } }

比例尺

mMapView.showZoomControls(false);//隐藏缩放按钮,默认为显示 mMapView.showScaleControl(false);//隐藏比例尺按钮,默认是显示的

2.获取最小(3),最大缩放级别(22)

//通过控制器 float maxZoomLevel=baiduMap.getMaxZoomLevel();//获取地图的最大缩放级别 float minZoomLevel=baiduMap.getMinZoomLevel();//获取地图的最小缩放级别 // 2.获取最小(3),最大缩放级别(22) Log.i(tag,"地图最大缩放级别"+maxZoomLevel+";地图最小缩放级别:"+minZoomLevel); //09-26 11:46:29.401: I/HelloBaiduMapActivity(30819): 地图最大缩放级别22.0;地图最小缩放级别:3.0

3.设置地图中心点

//坐标对象(腾讯大厦坐标:22.5460778801,113.9410619639) //参数1:纬度,参数2:经度 private LatLng tencentPos=new LatLng(22.5460778801,113.9410619639); //newLatLng,通过经纬度设置中心位置,参数1():维度,参数2:经度 mMapStatusUpdate= MapStatusUpdateFactory.newLatLng(tencentPos); baiduMap.setMapStatus(mMapStatusUpdate);

4.设置地图缩放为15

//zoomBy()是增量,zoomTo()是绝对值 mMapStatusUpdate= MapStatusUpdateFactory.zoomTo(15); baiduMap.setMapStatus(mMapStatusUpdate);

5.更新地图状态 1)缩小 2)放大 3)旋转(0~360),每次在原来的基础上在旋转30度 4)俯、仰(0~45),每次在原来的基础上在俯视-5度 5)移动

@Override public void onClick(View view) { MapStatusUpdate mapstatusupdate=null; switch (view.getId()) { case R.id.btn1: // 1)缩小 mapstatusupdate=MapStatusUpdateFactory.zoomOut(); break; case R.id.btn2: // 2)放大 mapstatusupdate=MapStatusUpdateFactory.zoomIn(); break; case R.id.btn3: // 3)旋转(0~360),每次在原来的基础上在旋转30度 //3.1先拿到原来的角度 MapStatus currentMapStatus=baiduMap.getMapStatus(); //原来的角度+30度 float rotate=currentMapStatus.rotate+30; //创建一个地图状态,给该状态中添加角度 MapStatus mapStatus=new MapStatus.Builder().rotate(rotate).build(); mapstatusupdate=MapStatusUpdateFactory.newMapStatus(mapStatus); break; case R.id.btn4: // 4)俯、仰(0~45),每次在原来的基础上在俯视-5度(只支持负数,正数没有效果) MapStatus currentMapStatus4=baiduMap.getMapStatus(); float overlook=currentMapStatus4.overlook-5; MapStatus mapStatus4=new MapStatus.Builder().overlook(overlook).build(); mapstatusupdate=MapStatusUpdateFactory.newMapStatus(mapStatus4); break; case R.id.btn5: // 5)移动 mapstatusupdate=MapStatusUpdateFactory.newLatLng(tencentPos); //让其缓慢移动,以动画的方式更新地图动态,动画耗时2s, baiduMap.animateMapStatus(mapstatusupdate,2000); } baiduMap.setMapStatus(mapstatusupdate); }

6.获取地图UI控制器:隐藏指南针

UiSettings uiSetting=baiduMap.getUiSettings(); //不显示指南针 uiSetting.setCompassEnabled(false);

Demo:https://github.com/luuuzi007/BaiduMpa

定位功能的实现

项目需要获取经纬度,直接去看文档发现不难,记录一下吧(隔的时间有点久都忘了自己怎么写的)

/** * 百度地图定位管理器 */ public LocationClient mLocationClient = null; private MyLocationListener myListener = new MyLocationListener(); /** * 百度地图初始化,和配置参数 */ private void initBaiduMap() { mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类 mLocationClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); //可选,设置定位模式,默认高精度 //LocationMode.Hight_Accuracy:高精度; //LocationMode. Battery_Saving:低功耗; //LocationMode. Device_Sensors:仅使用设备; option.setCoorType("bd09ll"); //可选,设置返回经纬度坐标类型,默认gcj02 //gcj02:国测局坐标; //bd09ll:百度经纬度坐标; //bd09:百度墨卡托坐标; //海外地区定位,无需设置坐标类型,统一返回wgs84类型坐标 option.setScanSpan(1000); //可选,设置发起定位请求的间隔,int类型,单位ms //如果设置为0,则代表单次定位,即仅定位一次,默认为0 //如果设置非0,需设置1000ms以上才有效 option.setOpenGps(true); //可选,设置是否使用gps,默认false //使用高精度和仅用设备两种定位模式的,参数必须设置为true option.setLocationNotify(true); //可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false option.setIgnoreKillProcess(false); //可选,定位SDK内部是一个service,并放到了独立进程。 //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true) //option.setIgnoreCacheException(false); //可选,设置是否收集Crash信息,默认收集,即参数为false //option.setWifiValidTime(5*60*1000); //可选,7.2版本新增能力 //如果设置了该接口,首次启动定位时,会先判断当前WiFi是否超出有效期,若超出有效期,会先重新扫描WiFi,然后定位 option.setEnableSimulateGps(false); //可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false mLocationClient.setLocOption(option); //mLocationClient为第二步初始化过的LocationClient对象 //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用 //更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明 } /** * 百度地图获取经度,纬度 ,接口实现 */ public class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果 //以下只列举部分获取经纬度相关(常用)的结果信息 //更多结果信息获取说明,请参照类参考中BDLocation类中的说明 double latitude = location.getLatitude(); //获取纬度信息 double longitude = location.getLongitude(); //获取经度信息 //存储获取的数据 latitude_str = String.valueOf(latitude); longitude_str = String.valueOf(longitude); float radius = location.getRadius(); //获取定位精度,默认值为0.0f //Log.i(tag, "百度地图定位:经度:" + longitude + ",纬度:" + latitude); String coorType = location.getCoorType(); //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准 int errorCode = location.getLocType(); //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明 } }

启动定位

//启动百度定位 mLocationClient.start();

关闭定位

//关闭定位 mLocationClient.stop();
转载请注明原文地址: https://www.6miu.com/read-200381.html

最新回复(0)