虽然以前了解过百度地图,但是今天突然用到发现原来自己什么都不会,只能先学习一下,根据需求从最简单的开始吧,首先说说地图的定位功能,这里只是实现了一它最简单最基本的功能,仅供初学者参考交流。
需要的SDK下载完以后。将so文件的压缩文件解压出来,把对应架构下的so文件放入自己APP的对应架构下的文件夹中,建议全部放入,程序兼容性会大大提升,将locSDK_5.X.jar文件拷贝到工程的libs目录下。
写好布局,最简单的布局,一个TextView一个Button,如下:
接下来在AndroidManifest.xml的application标签中声明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>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<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" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
<uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
设置key,在application标签中加入(这里把key换成自己申请下来的key):
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="key" />
接下来开始写相应的java代码:
这里就把主要代码贴出来:
private TextView mLocationResult;
private Button btn;
public LocationClient mLocationClient = null; //核心类locationClient 需要注意的是此类只能在主线程中声明而且需要context对象
public BDLocationListener myListener = new MyLocationListener();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mLocationClient = new LocationClient(getApplicationContext());
mLocationClient.registerLocationListener(myListener); //注册监听
mLocationResult = (TextView) findViewById(R.id.textView1);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
initLocation(); //设定定位参数
mLocationClient.start(); //启动定位
}
});
}
private void initLocation() {
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//设置定位模式
option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(0);//设置发起定位请求的间隔时间为5000ms
option.setIsNeedAddress(true);//返回的定位结果包含地址信息
option.setNeedDeviceDirect(true);//返回的定位结果包含手机机头的方向
mLocationClient.setLocOption(option);
}
<span style="white-space:pre"> </span>//实现接口
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null)
return ;
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());
}
logMsg(sb.toString());
}
}
/**
* 显示获得的定位情况字符串
* @param str
*/
public void logMsg(String str) {
try {
if (mLocationResult != null)
mLocationResult.setText(str);
} catch (Exception e) {
e.printStackTrace();
}
}
定位结果: