栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

开发环境:Android Studio

步骤:

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

示例:
keytool -list -v -keystore C:Userscwj_2.androiddebug.keystore -alias androiddebugkey

会提示“输入密钥库口令:”,口令默认是“android”

结果如图:

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


点击下载开发包:

  1. 在AndroidStudio中切换到Project下,将下载的包解压到如图位置,打开libs,在jar包位置点击右键>>Add to library

  2. 在app目录下的build.gradle文件中android块中配置sourceSets标签

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

  
      

  1. 在外部添加如下权限声明:




    



 

  1. 在布局文件中添加地图容器,地图初始化

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

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

  1. 运行得到结果如图:
  2. 配置AndroidManifest.xml文件:加入权限使用声明,在Application标签中声明定位的service组件。




  1. 开启地图的定位图层

  2. 通过继承抽象类BDAbstractListener并重写其onReceieveLocation方法来获取定位数据,并将其传给MapView。

  3. 通过LocationClient发起定位

  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. 运行得到结果如图:

    最后寄语,想要理解代码,还需自敲。不要图快,一昧地复制粘贴。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631364.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号