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