官方文档
http://lbsyun.baidu.com/index.php?title=%E9%A6%96%E9%A1%B5
http://lbsyun.baidu.com/index.php?title=androidsdk
1.获取密钥
http://lbsyun.baidu.com/apiconsole/key
创建应用:–>
应用名称:BaiduMapTest
应用类型:Android SDK
发布版SHA1:A9:7D:70:70:4C:67:83:71:AC:FD:18:6E:EF:9B:08:FF:CF:07:A6:BD
如何获取:AS–>Build–>Generate Signed APK
创建签名文件key.jks
keytool -v -list -keystore key.jks
SHA1: A9:7D:70:70:4C:67:83:71:AC:FD:18:6E:EF:9B:08:FF:CF:07:A6:BD
包名:com.bshui.baidumaptest
提交后生成访问应用AK:HSyrKQAG1BktzbYSqtR8ZQHTPwleEGaV
2.开发包&Demo下载
最新版本为:Android 地图 SDK v4.5.2
http://lbsyun.baidu.com/index.php?title=sdk/download&action#selected=mapsdk_basicmap,mapsdk_searchfunction,mapsdk_lbscloudsearch,mapsdk_calculationtool,mapsdk_radar
在导入时需要根据包名和SHA1生成一个key在BaiduMapsApiASDemo的AndroidMainfest.xml里添加
运行Demo测试地图功能
3.Android Studio工程配置
1)开发包拷到工程
将BaiduLBS_Android.jar放到app/libs目录下
右击BaiduLBS_Android.jar Add As Library…加入库
同步后build.gradle中会出现 implementation files(‘libs/BaiduLBS_Android.jar’)
2)在libs下新建armeabi目录
导入:libBaiduMapSDK_base_v4_5_2.so,libBaiduMapSDK_map_v4_5_2.so,liblocSDK7b.so
在app的build.gradle中说明so为该libs路径
sourceSets {
main {
jniLibs.srcDir ‘libs’
}
}
4.BaiduMapTest工程开发
一:显示地图
1)在AndroidManifest中添加开发密钥,所需权限
在applicaion中添加开发密钥
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="HSyrKQAG1BktzbYSqtR8ZQHTPwleEGaV"
2)添加所需权限
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_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" />
3)在布局xml文件中添加地图控件
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
4)在应用程序创建时初始化SDK引用的Context全局变量
SDKInitializer.initialize(getApplicationContext());
//应在setContentView之前
setContentView(R.layout.activity_main);
5)创建地图Activity,管理生命周期
public class MainActivity extends AppCompatActivity {
private MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//地图控件引用
mMapView = (MapView)findViewById(R.id.bmapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
}
```二:切换地图
1)普通地图
mMapView = (MapView)findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
2)卫星地图
mMapView = (MapView)findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
3)实时路况图
mMapView = (MapView)findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
mBaiduMap.setTrafficEnabled(true);
三:显示定位
1)自定义定位模式、定位图标、精度圈颜色
mBaiduMap.setMyLocationConfiguration(new MyLocationConfiguration(
mCurrentMode, true, mCurrentMarker,
accuracyCircleFillColor, accuracyCircleStrokeColor));
如果不设置则用默认的
2)实现定位功能
使用百度定位SDK获取相应的位置信息,然后利用地图SDK中的接口,您可以在地图上展示实时位置信息
需要在AndroidManifest.xml中添加location服务
<div class="se-preview-section-delimiter"></div>
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
如果不开的话public void onReceiveLocation(BDLocation location)只执行一次,只能获取一次定位数据
LocationClient mLocClient;
public MyLocationListenner myListener = new MyLocationListenner();
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
//定位初始化
mLocClient = new LocationClient(getApplicationContext());//传入全局的context
mLocClient.registerLocationListener(myListener);//注册定位监听函数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
mLocClient.setLocOption(option);
mLocClient.start();//启动定位sdk
定位服务类:LocationClient,相当于一个有定位服务的客户端,只能在主线程中启动
配置定位SDK参数的类:LocationClientOption
setIsNeedAddress(boolean isNeed)设置是否要地址信息,默认为无地址
setOpenGps(boolean openGps)设置是否打开gps进行定位
setScanSpan(int scanSpan)设置扫描间隔,单位是ms
BDLocationListener定位请求回调接口
BDLocation内部封装了经纬度、半径等属性
java.lang.String getAddrStr() 获取详细地址信息
double getAltitude() 获取高度信息,目前只有是GPS定位结果时才有效,单位米(还没有实现)
java.lang.String getCity() 获取城市
java.lang.String getCountry() 获取国家
double getLatitude() 获取纬度坐标
double getLongitude() 获取经度坐标
java.lang.String getProvince() 获取省份
float getSpeed() 获取速度,仅gps定位结果时有速度信息,单位公里/小时,默认值0.0f
java.lang.String getStreet() 获取街道信息
java.lang.String getTime() server返回的当前定位时间
float getRadius() 获取定位精度,默认值0.0f
float getDirection() gps定位结果时,行进的方向,单位度
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
return;
}
mCurrentLat = location.getLatitude();
mCurrentLon = location.getLongitude();
mCurrentAccracy = location.getRadius();
Log.i("tag","lat:"+mCurrentLat+"\n"+
"lon:"+mCurrentLon);
//构造定位数据
locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360
.direction(mCurrentDirection).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(17.0f);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
“`
3)隐藏百度左下角的logo
//隐藏左下角的logo
View child = mMapView.getChildAt(1);
if(child !=null){
child.setVisibility(View.INVISIBLE);
}
Demo代码
http://download.csdn.net/download/shui1025701856/10198319