留意:此代码的情况是:真机(体系版本为Android4.2.2)+WIFI联网(才能实现末了的运行后果);运用假造机调试会出现种种问题。
第一步:下载SDK和请求Key
到百度的网站http://developer.baidu.com/map/
第二步:而后选定SDK下载。(根据必要下载必要的SDK)
第三步:请求key
http://developer.baidu.com/map/index.php?title=androidsdk
而后选定建立运用
必要填写:运用称号和数字署名(SHA1)和包名
运用称号即是:
数字署名:
菜单栏中的window--------->Preferences---------->Build
包名:
填进入以后就会自动生成。
生成一个走访AK,这个AK,必然要记着。
第四步:编码
《1》建设文件manifest.xml中加上权限
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS"/> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <usespermissionandroid:name="android.permission.AUTHENTICATE_ACCOUNTS"/> <usespermissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET" /> <usespermission 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" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
而后把刚才请求的key加上去:
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="你请求的key" />
而后在加上
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service>
《2》结构文件增加百度舆图的结构:
<com.baidu.mapapi.map.MapView android:id="@+id/bmapview" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" />
《3》在libs文件夹下增加刚才下载的SDK(干脆复制,粘贴进入就行了)
而后在把百度舆图的JAR也增加到路径中去:
右键名目----------->Properties------>Java Build Path---->Libraries
增加进入以后,便了。
《4》MainActivity.java编码(头部的包就不写了,必要用到甚么,本人增加):
public class MainActivity extends Activity {
//百度舆图控件,特地表现舆图用的控件
private MapView mMapView = null;
// 百度舆图工具,空洞的舆图工具
private BaiduMap bdMap;
//定位形式
private LocationMode currentMode;
//定位客户端
private LocationClient locClient;
//定位图标
private Marker marker1;
//经纬度
private double latitude, longitude;
// 纪录是否第一次定位
private boolean isFirstLoc = true;
//舆图上增加的定位图标
BitmapDescriptor bitmap;
//定位监听器
//BDLocationListener locListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
//留存之前Activity状况
super.onCreate(savedInstanceState);
// SDK初始化
SDKInitializer.initialize(getApplicationContext());
//设置android程序没有标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
//表现结构界面
setContentView(R.layout.activity_main);
//获取表现舆图的控件
mMapView = (MapView) findViewById(R.id.bmapview);
//tv_show=(TextView)findViewById(R.id.tv_show);
//在舆图上表现的那个小图标
bitmap = BitmapDescriptorFactory
.fromResource(R.drawable.icon_marka);
init();
}
private void init() {
//定义舆图状况
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
//获取舆图工具
bdMap = mMapView.getMap();
//LatLng cenpt=new LatLng(30.963175f,120.400244f);
//BDLocation location;
//latitude = location.getLatitude();
// LatLng cenpt = new LatLng(location.getLatitude(),location.getLongitude());
// OverlayOptions options = new MarkerOptions()
// .position(cenpt)
// .icon(bitmap);
// MapStatus mMapStatus=new MapStatus.Builder()
// .target(cenpt)
// .zoom(18)
// .build();
//普通舆图
bdMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
// MapStatusUpdate msu = MapStatusUpdateFactory.newMapStatus(mMapStatus);
//设置舆图初始状况
bdMap.setMapStatus(msu);
//bdMap.addOverlay(options);
// bdMap = new BaiduMap.Map("container", {mapType:BaiduMap.MAP_TYPE_NORMAL});
// map.setCurrentCity("北京市");
// map.centerAndZoom(new bdMap.Point(116.404, 39.915), 18);
//目前定位形式为:普通
currentMode = LocationMode.NORMAL;
// 开启定位图层
bdMap.setMyLocationEnabled(true);
//定位服无的客户端
locClient = new LocationClient(this);
//注册监听函数
locClient.registerLocationListener(locListener);
//建设LocationClient这个定位客户端的定位参数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);// 翻开gps
option.setCoorType("bd09ll");// 设置坐标类型
option.setAddrType("all");//设置地点类型
option.setScanSpan(1000);//1s后定位
//建设客户端
locClient.setLocOption(option);
//启动定位(这一步很紧张,否则前边注册的那个监听函数就没用了)
locClient.start();
}
//这个是即是定位的监听函数(获取定位坐标,在坐标上表现图标)
BDLocationListener locListener = new BDLocationListener(){
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null || mMapView == null)
return ;
// 组织定位数据
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())//
.direction(100)// 方向
.latitude(location.getLatitude())//
.longitude(location.getLongitude())//
.build();
// 获取经纬度
latitude = location.getLatitude();
longitude = location.getLongitude();
//设置定位数据
bdMap.setMyLocationData(locData);
// 第一次定位的时候,那舆图中间店表现为定位到的地位
LatLng cenpt = new LatLng(latitude,longitude);
//定义笼盖物的坐标和运用的图标
OverlayOptions options = new MarkerOptions()
.position(cenpt)
.icon(bitmap);
//在舆图上增加笼盖物
bdMap.addOverlay(options);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
// MapStatusUpdate形貌舆图将要发生的变更
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll);
//更新舆图状况
bdMap.animateMapStatus(msu);
// bdMap.setMyLocationEnabled(false);
//reverseGeoCode(cenpt);
//表现地点信息
Toast.makeText(getApplicationContext(), location.getAddrStr(),
Toast.LENGTH_SHORT).show();
}
}
};
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
mMapView.onDestroy();
mMapView = null;
super.onDestroy();
}
}