百度定位SDK

    从上次说记录Android学习之路,到这一篇,半个月了。很惭愧。。。进度比较慢。今天终于吧百度定位给弄好了,花了2天时间。来总结一下。

    4.0需要密钥,我用的是3.3版本的。SDK和例子的下载地址:http://developer.baidu.com/map/geosdk-android-download.htm

    例子本身写的调理很清晰,我第一次把例子拷出来,用真机与模拟器测试老是显示4.9E。。这个坐标。原因是导入文件不全面,导入文件的步骤:

  1.将liblocSDK3.so文件拷贝到libs/armeabi目录下。

  2.将locSDK3.3.jar文件拷贝到工程的libs目录下,

  3.并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定locSDK3.3.jar,确定后返回。

  例子中的两个类,一个是Location,一个是主线程。

=======================================================================================================================================================

  Location主要就是实现了BDLocationListener和BDNotifyListener这两个类。

  英文好的童鞋就能看出来BDLocationListener注册位置监听,翻译过来。这个类的里面有两个抽象方法,

    public interface BDLocationListener {
      public void onReceiveLocation ( BDLocation location ) ;//这个方法是获取定位结果
        public void onReceivePoi ( BDLocation poiLocation ) ;//获取POI值(我的项目不需要详细信息,这个方法在我的Demo中是没有用到的)
          }
          1. BDNotifyListener类,我的理解是定时的获取用户所在的位置,如果发生改变就通知主线程。不知道我的理解对不对,不对还请大神纠正。(这个方法在我的项目中也没应用)
            ======================================================================================================================================================
            主线程
            实例化一些布局组件。

            创建LocationClient对象。

            下面说一下定位走的步骤:

           

            对象.start();这个方法一定是第一步,如果对象没有start,就没有办法请求定位。

            第二步是,设置对象的相关参数(设置定位参数包括:定位模式(单次定位,定时定位),返回坐标类型,是否打开GPS等等。看个人需要设定几个

          
            
            
          1. LocationClientOption option = new LocationClientOption ( ) ;
          2. option. setOpenGps ( true ) ;
          3. option. setAddrType ( "all" ) ; //返回的定位结果包含地址信息
          4. option. setCoorType ( "bd09ll" ) ; //返回的定位结果是百度经纬度,默认值gcj02
          5. option. setScanSpan ( 5000 ) ; //设置发起定位请求的间隔时间为5000ms
          6. option. disableCache ( true ) ; //禁止启用缓存定位
          7. option. setPoiNumber ( 5 ) ; //最多返回POI个数
          8. option. setPoiDistance ( 1000 ) ; //poi查询距离
          9. option. setPoiExtraInfo ( true ) ; //是否需要POI的电话和地址等详细信息
          10. mLocClient. setLocOption (option ) ;
            第三个步是

            对象.requestLocation()请求定位。

            第四步对象.stop();记得关闭哦。

            四个步骤,看明白了,代码是不是也很好理解了。下面写一下我的Demo。我是只要用户所在的城市这个参数。

          public class MainActivity extends Activity {
          
          
          private TextView textView;
          private LocationClient mLocationClient = null;
          private BDLocationListener myListener = new MyLocationListenner();
          
          
          @Override
          public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
          textView = (TextView) findViewById(R.id.textView1);
          mLocationClient = new LocationClient(getApplication());//创建LocationClient对象
          mLocationClient.registerLocationListener(myListener);//注册监听
          mLocationClient.start();//start方法
          setLocationOption();//设置参数
          }
          
          
          public class MyLocationListenner implements BDLocationListener {//监听器
          
          
          @Override
          public void onReceiveLocation(BDLocation location) {
          if (location == null) {
          return;
          } else {
          StringBuffer sb = new StringBuffer(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());
          sb.append("\ndizhi:");
          sb.append(location.getCity());
          sb.append(location.getCityCode());
          }
          sb.append("\nsdk version : ");
          sb.append(mLocationClient.getVersion());
          sb.append("\nisCellChangeFlag : ");
          sb.append(location.isCellChangeFlag());
          textView.setText(sb.toString());
          System.out.println(sb.toString());
          mLocationClient.stop();//stop方法
          }
          }
          
          public void onReceivePoi(BDLocation poiLocation) {
          }
          }
          
          
          public void setLocationOption() {//设置参数方法
          LocationClientOption option = new LocationClientOption();
          if (isGpsEnable()) {//如果是GPS
          option.setPriority(LocationClientOption.GpsFirst);
          } else if (isNetworkConnected()) {//如果是网络
          option.setAddrType("all");// 返回的定位结果包含地址信息
          option.setPriority(LocationClientOption.NetWorkFirst);
          } else {
          option = null;
          }
          option.setPoiNumber(3);
          option.disableCache(true);
          mLocationClient.setLocOption(option);
          }
          
          
          /** GPS是否打开 */
          private boolean isGpsEnable() {
          LocationManager locationManager = ((LocationManager) this.getSystemService(Context.LOCATION_SERVICE));
          return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
          }
          
          
          /** 网络是否连接 */
          private boolean isNetworkConnected() {
          ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
          NetworkInfo network = cm.getActiveNetworkInfo();
          if (network != null) {
          return network.isAvailable();
          }
          return false;
          }
          }



          下面是模拟器与后台的信息输出。


          • 0
            点赞
          • 0
            收藏
            觉得还不错? 一键收藏
          • 0
            评论
          要使用百度定位SDK进行wifi定位,需要进行以下步骤: 1. 在项目的build.gradle文件中添加百度定位SDK的依赖: ```java dependencies { implementation 'com.baidu.android:location:7.6.0' } ``` 2. 在AndroidManifest.xml文件中添加定位权限: ```xml <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> ``` 3. 在代码中创建一个LocationClient实例: ```java LocationClient mLocationClient = new LocationClient(getApplicationContext()); ``` 4. 设置定位参数: ```java LocationClientOption option = new LocationClientOption(); option.setScanSpan(5000); // 设置定位间隔时间 option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // 设置定位模式为高精度模式 option.setOpenGps(true); // 是否打开GPS option.setIsNeedAddress(true); // 是否需要返回地址信息 option.setNeedDeviceDirect(true); // 是否需要返回方向信息 option.setWifiCacheTimeOut(5 * 60 * 1000); // 设置wifi定位超时时间 mLocationClient.setLocOption(option); ``` 5. 开始定位: ```java mLocationClient.start(); ``` 6. 在定位回调中获取定位信息: ```java public class MyLocationListener extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null) { return; } double latitude = location.getLatitude(); double longitude = location.getLongitude(); String address = location.getAddrStr(); float direction = location.getDirection(); // 其他信息 } } ``` 在以上的代码中,设置了wifiCacheTimeOut参数来控制wifi定位的超时时间。如果超时时间过短,可能会导致wifi定位的精度不够高,因此可以适当增加超时时间来提高wifi定位的精度。

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

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

          请填写红包祝福语或标题

          红包个数最小为10个

          红包金额最低5元

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

          抵扣说明:

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

          余额充值