1。申请APIKEY http://lbsyun.baidu.com/apiconsole/key?application=key
具体申请和配置环节百度讲的很清楚
2。先去百度地图下载最新的jar包和so文件BaiduLBS_AndroidSDK_Lib->libs覆盖到项目中 下载地址http://lbsyun.baidu.com/sdk/download
3。配置AndroidManifest.xml文件
(1)用户权限:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_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.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
(2)修改application标签
在name属性中添加一个新的application 例如:com.example.testlocationbaidumap.MyMapApplication
就是在项目中新建个一个class名字为
MyMapApplication
文件(前面的都是项目包名)
内容为:
package com.example.testlocationbaidumap;
import com.baidu.mapapi.SDKInitializer;
import android.app.Application;
public class MyMapApplication extends Application
{
public void onCreate() {
super.onCreate();
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(this);
}
}
(3)在application标签下面添加
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="apikey" />//appkey为前面在百度地图官网申请的apikey
(4)在配置apikey的标签下面添加
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
(5)首先写
Activity的XML文件
在布局中添加一个mapview
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="100dp"
android:layout_below="@+id/button1"
android:layout_alignTop="@+id/button1"
android:layout_centerHorizontal="true"
android:clickable="true"
/>
(6)在Activity中
声明几个关键变量
public LocationClient mLocationClient=null;
public BDLocationListener mListener = new MyLocationListener();
public Button b1 ;
public double longitude;
public double latitude;
public float radius;
public MapView mapView;
public BaiduMap mBaiduMap;
然后在主线程中初始化LoccationClient
private void initLocationClient()
{
mLocationClient = new LocationClient(getApplicationContext());//
LocationClient的构造方法参数为Context
mLocationClient.registerLocationListener(mListener);//给
LocationClient注册监听器(下面会写)
LocationClientOption option = new LocationClientOption();//设置
LocationClient相关属性
option.setCoorType("bd09ll");//坐标编码方式 此处为百度坐标编码方式
option.setScanSpan(1000);//刷新间隔 毫秒为单位
option.setLocationMode(LocationMode.Hight_Accuracy);//高精度
mLocationClient.setLocOption(option);
}
接着初始化控件:
private void initMapView()
{
mapView = (MapView)findViewById(R.id.bmapView);
mBaiduMap = mapView.getMap();
}
然后就是核心代码了!!
mLocationClient.start();
if (mLocationClient != null && mLocationClient.isStarted())
{
mLocationClient.requestLocation();
//设置marker
LatLng point = new LatLng(38.933833 , 121.654824);//获取坐标也可以通过下面的方法获取当前坐标
BitmapDescriptor bitmapDescriptor =
BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);//设置marker图片
OverlayOptions options = new MarkerOptions().position(point).icon(bitmapDescriptor);//设覆盖层相关属性
mBaiduMap.addOverlay(options);//添加覆盖层
//定义地图状态
MapStatus mMapStatus = new MapStatus.Builder().target(point).zoom(18).build();
//定义MapStatusUpdate对象,以便描述地图状态将要发生的变化
MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//改变地图状态
mBaiduMap.setMapStatus(mMapStatusUpdate);
}
else
Log.d("LocSDK4", "locClient is null or not started");
}
最后需要编写一个
BDLocationListener,在这个类中可以获取很多信息,比如经纬度
class MyLocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation location)
{
if (location.getLatitude()==4.9E-324)
{//有时候获取的经纬度都是
4.9E-324其实就是世界地图坐标系的原点,这说明
//获取经纬度失败直接退出就可以了或者提示获取失败请重新获取
return;
}
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(
latitude=
location.getLatitude());
sb.append("\nlontitude : ");
//修改后的
//
sb.append(location.getLongitude();
sb.append(
longitude=
location.getLongitude();
sb.append("\nradius : ");
sb.append(location.getRadius());
if (location.getLocType() == BDLocation.TypeGpsLocation){
/* 如果按照下面的方式获取信息,那么结果得到的坐标都是0
因为
location.getLatitude()
location.getLongitude();
在取得一次数据后就变成0,上面的
sb.append(location.getLatitude());
.
sb.append(location.getLongitude());已经获取了数据,所以在下面的再获取的时候得到的就是都是0;
//获取经纬度以及
latitude = location.getLatitude();
longitude = location.getLongitude();
// 此处设置开发者获取到的方向信息,顺时针0-36
radius = location.getRadius();
*
/
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());
}
private void logMsg(String string)
{
Log.i("locationMsg", string);
}
最后别忘记写下mapView在Activity各个生命周期函数中的状态
protected void onPause() {
super.onPause();
// activity 暂停时同时暂停地图控件
mapView.onPause();
mLocationClient.stop();//停止定位
}
@Override
protected void onResume() {
super.onResume();
// activity 恢复时同时恢复地图控件
mapView.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
// activity 销毁时同时销毁地图控件
mapView.onDestroy();
}
相关学习博客http://blog.youkuaiyun.com/lmj623565791/article/details/37730469