要想自己的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,在非洲那块。