Android初学六之在应用中简单调用Android百度地图API SDK


0 实验环境

在Android Studio中进行有关代码的编写和界面效果展示。

有关文档资料和步骤可参考Android百度地图API的官网


1 界面展示

1.1 显示地图

在这里插入图片描述

1.2 显示定位

在这里插入图片描述


2 功能说明

(1)实现显示地图的功能;
(2)实现显示定位的功能。


3 配置调用地图SDK的步骤

3.1 注册百度地图开发者账号,并完成应用的开发密钥申请

在这里注册账号的步骤不再介绍,只需到百度开发者平台按步骤申请注册即可。

完成注册后,就需进行创建应用,并申请开发密钥AK。
(1)首先需在AS中新建项目,用于调用百度地图SDK;
(2)在百度开发者平台上,注册和获取密钥,详细步骤官网上已讲述的非常详细——注册和获取密钥参考文档
在这里需要注意获取SHA1时,每个人的命令有所不同。
注意1:首先需要找到Android Studio所用的JDK的目录,我的是G:androidStudioAndroid Studiojrebin
注意2:然后需要找到keystore的路径,我的是C:UsersAdministrator.androiddebug.keystore
最后在AS的命令行中切换到G:androidStudioAndroid Studiojrebin下,
在这里插入图片描述
使用keytool -list -v -keystore C:UsersAdministrator.androiddebug.keystore -alias androiddebugkey即可获取到SHA1
在这里插入图片描述
在百度地图开发者官网上成功注册应用后,即可看到该应用的SK码,后续在Android项目中会用到。
在这里插入图片描述

3.2 Android Studio配置

配置过程同样可参考官网给出的文档教程

注意1:下载SDK本地依赖时现只需下载基础的服务包
在这里插入图片描述
选择下载jar包的方式:
在这里插入图片描述
最后配置完成后,会发现在app目录的build.gradle的dependencies块中生成了工程所依赖的jar文件的对应说明
在这里插入图片描述


4 核心代码

4.1 显示地图

1.配置AndroidManifest.xml文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.baidupositioning">

    <application
        android:name=".DemoApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.BaiduPositioning">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="9qOeFWyGdVgb0Ce1IIGY6nKzfzzmGeUm" />
    </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" />

</manifest>

2.在布局文件中添加地图容器

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

3.地图初始化

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

4.创建地图Activity,管理MapView生命周期

public class MainActivity extends Activity {
    private MapView mMapView = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
    }
    @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();
    }
}

4.2 显示定位

1.配置AndroidManifest.xml文件
加入权限:

<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

添加服务:

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

2.编写MainActivity.java文件

public class MainActivity extends Activity {
    private MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private LocationClient mLocationClient;
    private boolean ifFrist = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);

        //开启地图的定位图层
        mBaiduMap.setMyLocationEnabled(true);

        //定位初始化
        mLocationClient = new LocationClient(this);

        //通过LocationClientOption设置LocationClient相关参数
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true); // 打开gps
        option.setCoorType("bd09ll"); // 设置坐标类型
        option.setScanSpan(1000);

        //设置locationClientOption
        mLocationClient.setLocOption(option);

        //注册LocationListener监听器
        MyLocationListener myLocationListener = new MyLocationListener();
        mLocationClient.registerLocationListener(myLocationListener);
        //开启地图定位图层
        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() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.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
                    .longitude(location.getLongitude())
                    .latitude(30.583239)    // 自定义纬度
                    .longitude(location.getLongitude())
                    .longitude(114.336702)  // 自定义经度
                    .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;
            }
        }
    }
}

5 代码仓库

具体代码已上传至gitee代码仓库


6 总结

学习了如何在应用中简单调用Android百度地图API SDK:
(1)实现显示地图的功能;
(2)实现显示定位的功能。


后续会继续更新有关Android设计的内容!
(注:第23次发文,如有错误和疑问,欢迎在评论区指出!)
——2021.12.2

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>