安卓百度地图sdk

安卓百度sdk定位

步骤一:百度地图开发者注册,并获取到key

获取SHA1时要在Android Studio中的终端使用命令keytool -list -v -keystore “C:\Users\administrator 2.android\debug.keystore” -alias androiddebugkey

这里双引号里的内容是自己电脑上.android\debug.keystore文件的路径,使用时要根据自己电脑上的用户名进行修改。

安卓百度地图sdk

步骤二:下载jar包并配置as

安卓百度地图sdk
导入jar包后add as library
然后在manifest中配置
安卓百度地图sdk

添加定位权限

使用定位SDK,需在AndroidManifest.xml文件中Application标签中声明service组件,每个App拥有自己单独的定位service,代码如下:

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

除添加service组件外,使用定位SDK还需在AndroidManifest.xml文件中添加如下权限:

<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

步骤三

编写代码

public class MainActivity extends Activity {
    private MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private LocationClient mLocationClient;
    private boolean ifFirst = true; 
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        mMapView = findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        mLocationClient = new LocationClient(this);
 
        // 注册LocationListener监听器
        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);
 
        // 设置locationClientOption
        mLocationClient.setLocOption(option);
 
        // 开启地图定位图层
        mLocationClient.start();*/
    }
 
    @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() {
        mLocationClient.stop();
        mBaiduMap.setMyLocationEnabled(false);
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
        mMapView = null;
        super.onDestroy();
    }
 
    //通过继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView
    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())
                    .latitude(30.58385)    // 纬度
                    .longitude(location.getLongitude())
                    .longitude(114.33669)  // 经度
                    .direction(location.getDirection())
                    .build();
            mBaiduMap.setMyLocationData(locData);
 
            // 通过MyLocationConfiguration类来构造
            // 包括定位的属性,定位模式、是否开启方向、设置自定义定位图标、精度圈填充颜色以及精度圈边框颜色5个属性。
            // 参数介绍:
            // 1.定位模式 地图SDK支持三种定位模式:NORMAL(普通态), FOLLOWING(跟随态), COMPASS(罗盘态)
            // 2.是否开启方向
            // 3.自定义定位图标 支持自定义定位图标样式,替换定位icon
            // 4.自定义精度圈填充颜色
            // 5.自定义精度圈边框颜色
            MyLocationConfiguration configuration = new MyLocationConfiguration(
                    MyLocationConfiguration.LocationMode.COMPASS,
                    false,
                    null,
                    0xAAFFFF88,
                    0xAA00FF00);
            // 在定义了以上属性之后,通过如下方法来设置生效:
            mBaiduMap.setMyLocationConfiguration(configuration);
 
            if (ifFirst) {
                LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
                MapStatus.Builder builder = new MapStatus.Builder();
                builder.target(ll);
                builder.zoom(20.0f);    // 放大为20层级
                mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
                //放大层级
                ifFirst = false;
            }
 
        }
    }
 
}

上述代码参考官方文档

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);
    }
}

最后是activity_main文件

<?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>

安卓百度地图sdk
结果图展示

小结

学习安卓调用百度地图sdk的使用,与定位功能的使用

代码仓库

上一篇:Xcode 最低要求和支持的 SDK


下一篇:Matlab 调用Optris Pi 450i红外相机direct SDK相关函数摘记