最近写的一个新闻客户端要定位到当前的城市,所以就要用到百度地图,自己研究了一下,还不是很深入,只是简单的定位到当前的城市。
首先要下载两个库,一个是:locSDK_6.12.jar 和一个动态库liblocSDK6a.so 注意,动态库要放在libs/armeabi文件夹下,(下载资源,可以去网上下载即可)
然后就是:写代码。
声明: public MyLocationListener mMyLocationListener;
private LocationClient mLocationClient;
private LocationClientOption.LocationMode tempMode = LocationClientOption.LocationMode.Battery_Saving;
oncreate()方法里:
tvchengshi=(TextView)findViewById(R.id.tvchengshi);
mLocationClient = new LocationClient(this);
mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
initLocation();
mLocationClient.start();
initLocation():
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(tempMode);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
String tempcoor = "gcj02";
option.setCoorType(tempcoor);//可选,默认gcj02,设置返回的定位结果坐标系,
option.setScanSpan(0);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天 安门附近”
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
mLocationClient.setLocOption(option);
}
最后实现位置回调:
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
//Receive Location
Location lc = Location.getInstance();
lc.addressStr=location.getAddrStr();
lc.province = location.getProvince();
System.out.println("--定位--->>>"+lc.province);
tvchengshi.setText(lc.province);
lc.city = location.getCity();
// tvchengshi.setText(lc.city);
lc.street = location.getStreet();
lc.district = location.getDistrict();
lc.latitude = location.getLatitude();
lc.longitude = location.getLongitude();
System.out.println("-----定位>>"+lc.toString());
mLocationClient.stop();
}
}
注意上面的 Location lc是自己定义的一个实体类,
属性有:
private static final Location LOCATION = new Location();/**
* 详细地址信息
*/
public String addressStr;
/**
* 省
*/
public String province;
/**
* 城市
*/
public String city;
/**
* 区/县
*/
public String district;
/**
* 街道
*/
public String street;
/**
* 经度
*/
public double longitude;
/**
* 纬度
*/
public double latitude;
public Area area;
private Location() {
}
public static Location getInstance() {
return LOCATION;
}
@Override
public String toString() {
return "Location{" +
"addressStr='" + addressStr + '\'' +
", province='" + province + '\'' +
", city='" + city + '\'' +
", district='" + district + '\'' +
", street='" + street + '\'' +
", longitude=" + longitude +
", latitude=" + latitude +
", area=" + area +
'}';
}
切记最后把定位关闭:
@Override
protected void onStop() {
// TODO Auto-generated method stub
mLocationClient.stop();
super.onStop();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
mLocationClient.unRegisterLocationListener(mMyLocationListener);
super.onDestroy();
}
剩下的是在清单文件中的配置了:
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote">
<intent-filter>
<action android:name="com.baidu.location.service_v2.2">
</action>
</intent-filter>
</service>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value=""/> 此处填上自己的key
权限: <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_LOGS" />
截止到目前,已经完成。