百度地图开放API初体验(二)

    前面已经实现了初始化百度地图,但是其默认显示位置是北京地区。换言之,它并没有根据自己需要而定位不同的位置。这里要介绍的,就是要实现简单的定位功能。

创新互联专注于邱县企业网站建设,响应式网站开发,成都商城网站开发。邱县网站建设公司,为邱县等地区提供建站服务。全流程按需网站建设,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

  1. 在AndroidManifest.xml中的application标签中声明service组件,因为每个app都拥有自己单独的定位service:

  

   ...

   

       android:name="com.baidu.location.f" 

       android:enabled="true"

       android:process=":remote" >

   

    ...

2.在AndroidManifest.xml中声明使用的权限。这个在第一篇介绍中,如果已经声明过了就足够使用,可以按照需求参考:

http://developer.baidu.com/map/index.php?title=android-locsdk/guide/v5-0

3.设置一个“我的位置”选项,这里不设置按钮,直接在菜单中显示点击,所以在res里面的menu文件夹下新建一个.xml文件(也可以用默认的),在里面设置一个item(这里用默认的main.xml):


4.进行main.java的编写:

public class MainActivity extends Activity {

        ...

        //定义相关定位变量

private LocationClient mLocationClient;

private MyLocationListener myLocationListener;

private boolean isFirstIn = true;

private double mLatitude;

private double mLongtitude;

        private Context context;

        private String mAddress;

//自定义定位图标

private BitmapDescriptor mIconLocation;

        ...

       protected void onCreate(Bundle savedInstanceState) {

             ...

             initLocation();//定位函数

      

             ...

       }  

       

private void initLocation(){

mLocationMode =LocationMode.NORMAL;//定义地图显示模式,这里是普通模式

mLocationClient =new LocationClient(this);//定位服务的客户端

myLocationListener = new MyLocationListener();//定位请求回调函数

mLocationClient.registerLocationListener(myLocationListener);//注册监听

LocationClientOption option = new LocationClientOption();//设置定位参数

option.setCoorType("bd09ll");//返回百度地图地标

option.setIsNeedAddress(true);//返回定位位置

option.setOpenGps(true);//打开GPS

option.setScanSpan(1000);//每1000ms扫描一次定位

mLocationClient.setLocOption(option);//设置LocationClientOption

//初始化图标,记得在res下的drawable文件下贴上自定义的图片

mIconLocation = BitmapDescriptorFactory.fromResource(R.drawable.test1);

       }

        //在onStart里面开启定位

        protected void onStart() {

super.onStart();

mBaiduMap.setMyLocationEnabled(true);

if(!mLocationClient.isStarted())

mLocationClient.start();

}

        //在onStop里面停止定位

protected void onStop() {

super.onStop();

mBaiduMap.setMyLocationEnabled(false);

mLocationClient.stop();

}

        //这个是每个工程自定义的Menu监听,监听item是否被选中

public boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main,menu);

return true;

}

        //选中item时的动作定义

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

        case R.id.id_map_location:

        LatLng latLng = new LatLng(mLatitude, mLongtitude);//取得目前位置的经纬度

MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);//更新经纬度

mBaiduMap.animateMapStatus(msu);//以动画方式更新地图状态

        Toast.makeText(context,mAddress,Toast.LENGTH_SHORT).show();//显示位置信息

                break;

default:

break;

}

return super.onOptionsItemSelected(item);

}

private class MyLocationListener implements BDLocationListener{

public void onReceiveLocation(BDLocation location){

MyLocationData data = new MyLocationData.Builder()//

   .accuracy(location.getRadius())//

   .latitude(location.getLatitude())//

   .longitude(location.getLongitude())//

   .build();

mBaiduMap.setMyLocationData(data);

   //设置自定义图标

   MyLocationConfiguration config = new MyLocationConfiguration(mLocationMode, true, mIconLocation);

mBaiduMap.setMyLocationConfigeration(config);

            

//更新经纬度

mLatitude = location.getLatitude();

mLongtitude = location.getLongitude();

 if(isFirstIn)

{   

LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());

MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);

mBaiduMap.animateMapStatus(msu);

isFirstIn = false;

        mAddress = location.getAddrStr();

Toast.makeText(context,mAddress,Toast.LENGTH_SHORT).show();

}

  

}

}

}

    这里已经实现了简单的定位功能,小伙伴们可以尝试一下~


分享名称:百度地图开放API初体验(二)
文章链接:http://hbruida.cn/article/psojoj.html