您的位置:首页 > 移动开发 > Android开发

百度定位SDK

2013-09-14 07:39 155 查看
    从上次说记录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注册位置监听,翻译过来。这个类的里面有两个抽象方法,

publicinterface
BDLocationListener{
publicvoid
onReceiveLocation( BDLocation location);//这个方法是获取定位结果
publicvoid
onReceivePoi(BDLocation poiLocation);//获取POI值(我的项目不需要详细信息,这个方法在我的Demo中是没有用到的)
}

BDNotifyListener类,我的理解是定时的获取用户所在的位置,如果发生改变就通知主线程。不知道我的理解对不对,不对还请大神纠正。(这个方法在我的项目中也没应用)
======================================================================================================================================================
主线程

  实例化一些布局组件。

  创建LocationClient对象。

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

 

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

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

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


下面是模拟器与后台的信息输出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android