Android之百度地图定位

Android之百度地图定位

开发前配置

注册和获取密钥(AK)
http://lbs.baidu.com/index.php?title=androidsdk/guide/create-project/ak
在项目中集成BaiduMap SDK
http://lbs.baidu.com/index.php?title=androidsdk/guide/create-project/androidstudio

任务描述

在项目中调试出百度地图的显示画面,并进行地图定位

主要代码

配置AndroidManifest.xml文件
在清单文件中增加权限和添加注册远程服务和配置应用Key


    <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="FyHtaCb5my6BoTMcgmqajbdSTuuUWpGx" />

    <service android:name="com.baidu.location.f"
        android:enabled="true"
        android:process=":remote"/>

</application>

<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

自Android6.0起部分权限的使用需要开发者在代码中动态申请。

activity_main.xml添加控件

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clickable="true" />
</androidx.constraintlayout.widget.ConstraintLayout>

地图初始化
新建一个自定义的Application,在其onCreate方法中完成SDK的初始化。

public class DemoApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext   
        SDKInitializer.initialize(this);
        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);
    }
}

使用SDK功能组件前都需要调用SDKInitializer.initialize(getApplicationContext()),因此建议在应用创建时初始化SDK引用的Context为全局变量。

管理MapView生命周期

@Override
protected void onResume() {
    super.onResume();
    mMapView.onResume();
}

@Override
protected void onPause() {
    super.onPause();
    mMapView.onPause();
}

@Override
protected void onDestroy() {
    mLocationClient.stop();
    mMapView.onDestroy();
    super.onDestroy();
}

通过LocationClient发起定位

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mMapView = findViewById(R.id.bmapView);

    /*BaiduMapOptions options = new BaiduMapOptions();
    //设置地图模式为卫星地图
    options.mapType(BaiduMap.MAP_TYPE_SATELLITE);
    mMapView= new MapView(this,options);
    setContentView(mMapView);*/

    mBaiduMap = mMapView.getMap();

    mLocationClient = new LocationClient(this);

    MyLocationListener myLocationListener = new MyLocationListener();
    mLocationClient.registerLocationListener(myLocationListener);

    mBaiduMap.setMyLocationEnabled(true);

    LocationClientOption option = new LocationClientOption();
    //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
    option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
    option.setOpenGps(true); // 打开gps
    option.setCoorType("bd09ll"); // 设置坐标类型
    option.setScanSpan(1000);

    option.setIsNeedAddress(true);

    mLocationClient.setLocOption(option);

    mLocationClient.start();
}

构造地图数据

public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            //mapView 销毁后不在处理新接收的位置
            if (location == null || mMapView == null){
                return;
            }
            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                    // 此处设置开发者获取到的方向信息,顺时针0-360
                    .latitude(location.getLatitude())
                    .longitude(location.getLongitude())
                    .direction(location.getDirection())
                    .build();
            mBaiduMap.setMyLocationData(locData);

            MyLocationConfiguration configuration = new MyLocationConfiguration(
                    MyLocationConfiguration.LocationMode.COMPASS, false, null,0xAAFFFF88,0xAA00FF00);
            mBaiduMap.setMyLocationConfiguration(configuration);

            if (ifFrist) {
                LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
                MapStatus.Builder builder = new MapStatus.Builder();
                builder.target(ll);
                builder.zoom(18.0f);
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
                //放大层级
                ifFrist = false;
            }

        }
    }
}

任务结果

在这里插入图片描述

源码地址:

https://gitee.com/wyf234571/Mybaidumap

参考链接:

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值