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

要想自己的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 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();
        if(locations.size()>5)
        {
            locations.clear();
        }
        locations.add(jingwei);
    }
    public List 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,在非洲那块。

Android——百度地图获取实时定位_第1张图片

你可能感兴趣的:(Android——百度地图获取实时定位)