百度地图使用教程(二)-------- 定位实现

 

版本 Android SDK v3.0.0

1.   导入文件库

在相关下载最新的库文件。将liblocSDK4.so文件拷贝到libs/armeabi目录下。将locSDK4.1.jar文件拷贝到工程的libs目录下,并在工程属性->JavaBuild Path->Libraries中选择“Add JARs”,选定locSDK4.1.jar,确定后返回。这样您就可以在程序中使用百度地理围栏SDK了。

2.   设置AndroidManifest.xml

在application标签中声明service组件,每个app拥有自己单独的定位service

<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">

</service>

声明使用权限

<!--这个权限用于进行网络定位-->

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

<!--这个权限用于访问GPS定位-->

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>

<!--获取运营商信息,用于支持提供运营商信息相关的接口-->

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

<!--用于读取手机当前的状态-->

<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>

<!--写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

<!--访问网络,网络定位需要上网-->

<uses-permission android:name="android.permission.INTERNET"/>

<!-- SD卡读取权限,用户写入离线定位数据-->

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>

<!--允许应用读取低级别的系统日志文件-->

<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>

import相关类

importcom.baidu.location.BDLocation;

importcom.baidu.location.BDLocationListener;

importcom.baidu.location.LocationClient;

importcom.baidu.location.LocationClientOption;

importcom.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类

//如果使用地理围栏功能,需要import如下类

importcom.baidu.location.BDGeofence;

importcom.baidu.location.BDLocationStatusCodes;

importcom.baidu.location.GeofenceClient;

importcom.baidu.location.GeofenceClient.OnAddBDGeofencesResultListener;

importcom.baidu.location.GeofenceClient.OnGeofenceTriggerListener;

importcom.baidu.location.GeofenceClient.OnRemoveBDGeofencesResultListener;

 

3.   功能类的使用

使用基本定位功能

基本定位功能指的根据用户实际需求,返回用户当前位置的基础定位服务。包含GPS和网络定位(Wi-Fi和基站定位)功能。基本定位功能同时还支持结合定位结果的反地理编码功能,离线定位,周边POI查询和位置提醒功能。

初始化LocationClient 此处需要注意:LocationClient类必须在主线程中声明。需要Context类型的参数。

Context需要时全进程有效的context,推荐用getApplicationConext获取全进程有效的context

public LocationClient mLocationClient =null;
public BDLocationListener myListener =new MyLocationListener();
 
publicvoid onCreate(){
    mLocationClient =new LocationClient(getApplicationContext());     //声明LocationClient
mLocationClient.registerLocationListener( myListener );    //注册监听函数
LocationClientOption option = new LocationClientOption();
                               option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式
                               option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02
                               option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms
                               option.setIsNeedAddress(true);//返回的定位结果包含地址信息
                               option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向
                               mLocationClient.setLocOption(option);
                               mLocationClient.start();
                               if (mLocationClient != null && mLocationClient.isStarted())
                                        mLocationClient.requestLocation();
                               else 
                                        Log.d("LocSDK4", "locClient is null or not started");
}

实现BDLocationListener接口

BDLocationListener接口有2个方法需要实现: 1.接收异步返回的定位结果,参数是BDLocation类型参数。 2.接收异步返回的POI查询结果,参数是BDLocation类型参数。

publicclass MyLocationListener implements BDLocationListener {
    @Override
   publicvoid onReceiveLocation(BDLocation location){
      if(location ==null)
          return;
      StringBuffer sb =newStringBuffer(256);
      sb.append("time : ");
      sb.append(location.getTime());
      sb.append("\nerror code : ");
      sb.append(location.getLocType());
      sb.append("\nlatitude : ");
      sb.append(location.getLatitude());
      sb.append("\nlontitude : ");
      sb.append(location.getLongitude());
      sb.append("\nradius : ");
      sb.append(location.getRadius());
      if(location.getLocType()== BDLocation.TypeGpsLocation){
           sb.append("\nspeed : ");
           sb.append(location.getSpeed());
           sb.append("\nsatellite : ");
           sb.append(location.getSatelliteNumber());
           }elseif(location.getLocType()== BDLocation.TypeNetWorkLocation){
           sb.append("\naddr : ");
           sb.append(location.getAddrStr());
        }
 
      logMsg(sb.toString());
    }
publicvoid onReceivePoi(BDLocation poiLocation){
//将在下个版本中去除poi功能
         if(poiLocation ==null){
                return;
          }
         StringBuffer sb =newStringBuffer(256);
          sb.append("Poi time : ");
          sb.append(poiLocation.getTime());
          sb.append("\nerror code : ");
          sb.append(poiLocation.getLocType());
          sb.append("\nlatitude : ");
          sb.append(poiLocation.getLatitude());
          sb.append("\nlontitude : ");
          sb.append(poiLocation.getLongitude());
          sb.append("\nradius : ");
          sb.append(poiLocation.getRadius());
          if(poiLocation.getLocType()== BDLocation.TypeNetWorkLocation){
              sb.append("\naddr : ");
              sb.append(poiLocation.getAddrStr());
         }
          if(poiLocation.hasPoi()){
               sb.append("\nPoi:");
               sb.append(poiLocation.getPoi());
         }else{             
               sb.append("noPoi information");
          }
         logMsg(sb.toString());
        }
}

BDLocation类,封装了定位SDK的定位结果,在BDLocationListeneronReceive方法中获取。通过该类用户可以获取errorcode,位置的坐标,精度半径等信息。

 

 

4.   定位类的源码

 

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.widget.TextView;

 

importcom.baidu.location.BDLocation;

importcom.baidu.location.BDLocationListener;

importcom.baidu.location.LocationClient;

importcom.baidu.location.LocationClientOption;

import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类

//如果使用地理围栏功能,需要import如下类

import com.baidu.location.BDGeofence;

import com.baidu.location.BDLocationStatusCodes;

import com.baidu.location.GeofenceClient;

import com.baidu.location.GeofenceClient.OnAddBDGeofencesResultListener;

import com.baidu.location.GeofenceClient.OnGeofenceTriggerListener;

import com.baidu.location.GeofenceClient.OnRemoveBDGeofencesResultListener;

importcom.baidu.location.LocationClientOption.LocationMode;

public classLocation_Activity extends Activity {

   public LocationClient mLocationClient = null;

   public BDLocationListenermyListener =newMyLocationListener();

   TextView tv_content;

   @Override

   protected voidonCreate(Bundle savedInstanceState) {

      // TODOAuto-generated method stub

      super.onCreate(savedInstanceState);

      tv_content=new TextView(this);

      setContentView(tv_content);

       mLocationClient = newLocationClient(getApplicationContext());    //声明LocationClient

          mLocationClient.registerLocationListener(myListener );   //注册监听函数

         LocationClientOption option = newLocationClientOption();

         option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式

         option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02

         option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms

         option.setIsNeedAddress(true);//返回的定位结果包含地址信息

         option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向

          mLocationClient.setLocOption(option);

          mLocationClient.start();

          if (mLocationClient !=null&&mLocationClient.isStarted())

             mLocationClient.requestLocation();

          else

             Log.d("LocSDK4", "locClientis null or not started");

   }

   public classMyLocationListener implements BDLocationListener {

      @Override

      public voidonReceiveLocation(BDLocation location) {

         if (location== null)

                 return ;

         StringBuffer sb = newStringBuffer(256);

         sb.append("time : ");

         sb.append(location.getTime());

         sb.append("\nerror code: ");

         sb.append(location.getLocType());

         sb.append("\nlatitude :");

         sb.append(location.getLatitude());

         sb.append("\nlontitude :");

         sb.append(location.getLongitude());

         sb.append("\nradius :");

         sb.append(location.getRadius());

         if(location.getLocType() == BDLocation.TypeGpsLocation){

            sb.append("\nspeed :");

            sb.append(location.getSpeed());

            sb.append("\nsatellite :");

            sb.append(location.getSatelliteNumber());

         } else if(location.getLocType() == BDLocation.TypeNetWorkLocation){

            sb.append("\naddr :");

            sb.append(location.getAddrStr());

         }

         Log.d("LocSDK4",sb.toString());

         if(location.getAddrStr()!=null&& !location.getAddrStr().equals("")){

            tv_content.setText(location.getAddrStr());

         }

      }

 

      @Override

      public voidonReceivePoi(BDLocation arg0) {

         // TODOAuto-generated method stub

        

      }

   }

}

5.   需要注意的问题

5.1   <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="key"/>//key:开发者申请的key,在Application内部
5.2   关于应用签名问题请参考
http://blog.csdn.net/ywx683719/article/details/34476981
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值