首先我们需要去百度地图开发者平台申请一个应用密钥,这个具体的申请方式在百度地图开发者平台里面,这里就不做讲述了。在申请好了密钥之后我们首先要做的就是把百度地图的sdk加进来。
我们需要加一个sdk和一个so文件,
这个弄好之后我们接下来就是把百度地图需要的的权限加进去
<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>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
权限加完之后接下来我们需要把百度的密钥和service加进去
<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="cgm9sfAppCCMF0aloSesfqOS"/>
这些弄好之后我们的准备工作就好了,接下来就是代码开发了。
这里为了把百度地图的地址获取和activity不放在一起,在了一下简单处理,以后需要的时候就可以直接调用这个地图工具来获取地址了
package com.example.baidudemo;
import android.content.Context;
import android.util.Log;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.LocationClientOption.LocationMode;
public class BaiduLocalUtils {
private LocationClient mLocationClient;//定位SDK的核心类
private MyLocationListener mMyLocationListener;//定义监听类
private OnFinshListener mListener ;
private static BaiduLocalUtils bean = new BaiduLocalUtils();
public static BaiduLocalUtils getInstantce(){
return bean;
}
/**
* 获取当前的详细地址
* @param context
* @param listener
*/
public void getLocalAddStr(Context context,OnFinshListener listener){
if(mLocationClient==null){
initLocationClient(context);
InitLocation();
}
mListener=listener;
mLocationClient.start();
}
private void InitLocation(){
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//设置高精度定位定位模式
option.setCoorType("bd09ll");//设置百度经纬度坐标系格式
option.setScanSpan(1000);//设置发起定位请求的间隔时间为1000ms
option.setIsNeedAddress(true);//反编译获得具体位置,只有网络定位才可以
mLocationClient.setLocOption(option);
}
private void initLocationClient(Context context){
mLocationClient = new LocationClient(context);
mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
}
/**
* 实现实位回调监听
*/
private class MyLocationListener implements BDLocationListener {
public void onReceiveLocation(BDLocation location) {
//Receive Location
StringBuffer sb = new StringBuffer(256);
if (location.getLocType() == BDLocation.TypeGpsLocation){//通过GPS定位
sb.append(location.getAddrStr());//获得当前地址
} else if (location.getLocType() == BDLocation.TypeNetWorkLocation){//通过网络连接定位
sb.append(location.getAddrStr());//获得当前地址
}
if(mListener!=null){
if(!sb.toString().equals("")){
mListener.Succ(sb.toString());
}else{
mListener.Fail();
}
}
Log.i("BaiduLocationApiDem", sb.toString());
}
}
public interface OnFinshListener{
public void Succ(String address);
public void Fail();
}
}
这样就好了,接下来我们验证下
package com.example.baidudemo;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import com.example.baidudemo.BaiduLocalUtils.OnFinshListener;
public class MainActivity extends Activity {
private TextView LocationResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LocationResult = (TextView)findViewById(R.id.textView1);
StringBuffer addString = new StringBuffer();
BaiduLocalUtils.getInstantce().getLocalAddStr(this,new OnFinshListener() {
@Override
public void Succ(String address) {
LocationResult.setText(address);
}
@Override
public void Fail() {
}
});
LocationResult.setText(addString);
}
}
结果