android接入百度SDK

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();
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值