Android 基于百度地图SDK的位置服务

位置服务(Location Based Services,LBS),又称定位服务,是指通过GPS卫星或者网络,获取各种终端的位置坐标,在电子地图平台的支持下,为用户提供基于位置导航、查询的一种信息服务。

开发环境:Android Studio

步骤:

  1. 点击进入百度地图开放平台
  2. 开发者登陆后,点击进入主界面右上角的“控制台”
    Android 基于百度地图SDK的位置服务_第1张图片
  3. 点击“创建应用”,应用名称随便取,应用类型选择Android SDK,应用服务至少选择如下图片中的两项。
    Android 基于百度地图SDK的位置服务_第2张图片
  4. 打开Android Studio,选择或新建即将加载地图服务的项目,打开AndroidManifest.xml文件,找到如下图位置的package标签,将其内容输入到“创建目录”界面的PackageName框之中。
    Android 基于百度地图SDK的位置服务_第3张图片Android 基于百度地图SDK的位置服务_第4张图片
  5. 在AndroidStudio的界面中,点击左上角File>>Project Structure>>SDK Location中查找到JDK的位置
    Android 基于百度地图SDK的位置服务_第5张图片
  6. 在cmd中打开JDK下的bin目录,运行命令如下:
keytool -list -v -keystore /*本机keystore路径*/ -alias /*命名*/

示例:
keytool -list -v -keystore C:\Users\cwj_2\.android\debug.keystore -alias androiddebugkey

会提示“输入密钥库口令:”,口令默认是“android”
在这里插入图片描述
结果如图:
Android 基于百度地图SDK的位置服务_第6张图片

  1. 得到SHA1,填入“创建目录”界面的发布版SHA1框之中
    Android 基于百度地图SDK的位置服务_第7张图片
  2. 应用创建完成后,可以在百度地图开放平台>>应用管理>>我的应用中找到应用的key值
    Android 基于百度地图SDK的位置服务_第8张图片
  3. AndroidStudio配置步骤:见官方文档。首先在官网下载SDK

Android 基于百度地图SDK的位置服务_第9张图片
点击下载开发包:Android 基于百度地图SDK的位置服务_第10张图片

  1. 在AndroidStudio中切换到Project下,将下载的包解压到如图位置,打开libs,在jar包位置点击右键>>Add to library
    Android 基于百度地图SDK的位置服务_第11张图片

  2. 在app目录下的build.gradle文件中android块中配置sourceSets标签
    Android 基于百度地图SDK的位置服务_第12张图片

  3. 在AndroidManifest.xml文件中的中加入如下代码配置开发密钥(AK)

<application>  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发者 key" />  
</application>

Android 基于百度地图SDK的位置服务_第13张图片

  1. 外部添加如下权限声明:
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,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" /> 

Android 基于百度地图SDK的位置服务_第14张图片

  1. 在布局文件中添加地图容器,地图初始化
<com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:clickable="true" />

Android 基于百度地图SDK的位置服务_第15张图片

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

Android 基于百度地图SDK的位置服务_第16张图片

  1. 创建地图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();  
    }  
}

Android 基于百度地图SDK的位置服务_第17张图片

  1. 运行得到结果如图:
    Android 基于百度地图SDK的位置服务_第18张图片
  2. 配置AndroidManifest.xml文件:加入权限使用声明,在Application标签中声明定位的service组件。
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Android 基于百度地图SDK的位置服务_第19张图片

  1. 开启地图的定位图层
    在这里插入图片描述

  2. 通过继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView。
    Android 基于百度地图SDK的位置服务_第20张图片

  3. 通过LocationClient发起定位
    Android 基于百度地图SDK的位置服务_第21张图片

  4. 将自己的位置显示在地图中间
    在这里插入图片描述
    以下是MainActivity的源码

package com.example.mapapplication;

import android.app.Activity;
import android.os.Bundle;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;

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

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mMapView = (MapView) findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();

        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

        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();
        mBaiduMap.setMyLocationEnabled(true);

    }
    @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);
        mMapView.onDestroy();
        mMapView = null;
        super.onDestroy();
    }

    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
                    .direction(location.getDirection()).latitude(location.getLatitude())
                    .longitude(location.getLongitude()).build();
            mBaiduMap.setMyLocationData(locData);
            LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());
            MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(ll);
            mBaiduMap.animateMapStatus(status);
        }
    }
}
  1. 运行得到结果如图:
    Android 基于百度地图SDK的位置服务_第22张图片
    最后寄语,想要理解代码,还需自敲。不要图快,一昧地复制粘贴。

你可能感兴趣的:(学生作业,笔记,android,百度)