Android——百度地图获取实时定位

    xiaoxiao2021-03-25  142

    要想自己的app获得百度地图的定位服务,需要将自己注册成百度开发者,可以先不去

    认证。

    前往百度地图开放平台

    在开发下面找到地图sdk,定位sdk,利用开发文档进行配置。

    首先要获得密匙:在开发指南里面有申请密匙申请方法。

    然后创建应用,在你的IDE中创建你的app应用,需要获得包名和sha值。

    完成应用创建会给你AK密匙。

    在文档中将所需的权限,还有空间MapView的初始化等等。

    注意:

    每一个app的第一步进行的是Application的创建,是所有Activity,service等的最顶

    层,由于在SDK各功能组件使用之前都需要调用

    SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在

    Application的初始化方法中。

    首先自定义Application继承Application。

    由于需要Application需要进行服务service和Activity进行通信,所以将Application构

    造成单例模式(但是构造方法是不允许private的)。

    步骤:

    1、属性中创建Application对象instance。

    private static MyApplication instence;

    2、创建getInstance获得instance对象。

    public static MyApplication getInstance() { return instence; }

    3、在onCreate方法中进行初始化。

    @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); instence=this; SDKInitializer.initialize(getApplicationContext()); }

    4、在Manifest文件中application便签中name属性指定创建的Application.

    基础地图中可以获得普通地图,卫星地图的切换,需要定位服务,则到开发下面的定位

    sdk中文档中查看。

    我们一般将定位服务方到service里面。

    同样需要将权限加进去,还有声明service。

    创建自己的Service,继承service,重写onCreate,onStartCommand、onDestroy等

    方法。(这里用start开启服务不是bind)

    根据文档,在onCreate方法中一番设置。

    注意:

    不要忘了在onStartCommand进行client的start方法。开始定位。

    中client设置的监听方法的第二个重新方法里面获取定位信息。

    onReceiveLocation(BDLocation arg0),arg0有定位的经纬度等信息。

    @Override public void onReceiveLocation(BDLocation arg0) { // TODO Auto-generated method stub //获得定位到的经纬度 LatLng jingwei=new LatLng(arg0.getLatitude(), arg0.getLongitude()); //通过Application里面方法将经纬度信息保存,便于Activity中baidumap使用 MyApplication.getInstance().setLocation(jingwei); //自动跳转到自己定位的经纬度中心 MapStatus mMapStatus = new MapStatus.Builder() .target(jingwei) .zoom(18) .build(); //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化 MapStatusUpdate mapstatus = MapStatusUpdateFactory.newMapStatus(mMapStatus); //改变地图状态 //将地图状态存到Application中,供Activity的baidumap使用。 MyApplication.getInstance().setMapStatus(mapstatus); }

    来看看MyApplication里面的方法:

    public class MyApplication extends Application { private static MyApplication instence; private List<LatLng> locations; private MapStatusUpdate mapstatus; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); instence=this; SDKInitializer.initialize(getApplicationContext()); } public static MyApplication getInstance() { return instence; } public void setLocation(LatLng jingwei) { //最多保存5个位置信息,5个清理以后能保证至少一个位置信息立马添加 locations=new ArrayList<LatLng>(); if(locations.size()>5) { locations.clear(); } locations.add(jingwei); } public List<LatLng> getLocation() { return locations; } public void setMapStatus(MapStatusUpdate mapstatus) { this.mapstatus=mapstatus; } public MapStatusUpdate getMapStatus() { return mapstatus; } }

    service写完之后,需要在Activity的onCreate方法中将service启动。

    Activity获得经纬度:

    LatLng jingwei=MyApplication.getInstance().getLocation().get(0);

    获得地图状态:

    baidumap需要将之前service里面的地图状态获得才可以跳转。

    baidumap.animateMapStatus(MyApplication.getInstance().getMapStatus())

    跳转到中心位置方法:

    MapStatusUpdate mapstatus = MapStatusUpdateFactory.newLatLng(latlng); //改变地图状态 baidumap.setMapStatus(mapstatus);

    模拟器的经纬度定位只能是0.0,在非洲那块。

    转载请注明原文地址: https://ju.6miu.com/read-8330.html

    最新回复(0)