权限
<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.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="zehbNukknGVFc0PchtdEmzKxYRMnZ260" />
布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal" >
<Button
android:id="@+id/action_normal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="普通地图" />
<Button
android:id="@+id/action_site"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="卫星地图" />
<Button
android:id="@+id/action_traffic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="实时交通图" />
<Button
android:id="@+id/action_mylocation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="我的位置" />
<Button
android:id="@+id/action_overlay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="添加覆盖物" />
</LinearLayout>
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/linearLayout1"
android:clickable="true" />
</LinearLayout>
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity implements OnClickListener {
private MapView mMapView;
private BaiduMap mMap;
private LocationClient mLocationClient;
private MyBDLocationListener mBDLocationListener;
private double mLat;
private double mLong;
private Button action_normal;
private Button action_site;
private Button action_traffic;
private Button action_mylocation;
private Button action_overlay;
private boolean isEnable;
private boolean isFirst=true;
private double Latitude;
private double Longitude;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
init();
// 初始化地图
initMapView();
// 定位
initLocation();
}
public void init(){
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
action_normal=(Button)findViewById(R.id.action_normal);
action_normal.setOnClickListener(this);
action_site=(Button)findViewById(R.id.action_site);
action_site.setOnClickListener(this);
action_traffic=(Button)findViewById(R.id.action_traffic);
action_traffic.setOnClickListener(this);
action_mylocation=(Button)findViewById(R.id.action_mylocation);
action_mylocation.setOnClickListener(this);
action_overlay=(Button)findViewById(R.id.action_overlay);
action_overlay.setOnClickListener(this);
}
private void initLocation() {
mLocationClient = new LocationClient(this);
mBDLocationListener = new MyBDLocationListener();
mLocationClient.registerLocationListener(mBDLocationListener);
// 设置定位的一些参数
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
option.setOpenGps(true);
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
mLocationClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation location) {
// TODO Auto-generated method stub
if(location==null){
return;
}
Latitude=location.getLatitude();
Longitude=location.getLongitude();
}
});
}
private void initMapView() {
// 获取地图控件引用
mMap = mMapView.getMap();
mMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
// 设置初始距离是500米
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
mMap.setMapStatus(msu);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
private void ToMyLoaction() {
//定位经纬度
LatLng lat = new LatLng(mLat,mLong);
MapStatusUpdate msu =MapStatusUpdateFactory.newLatLng(lat );
//设置给地图
mMap.setMapStatus(msu);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.action_normal: // 普通地图
mMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case R.id.action_site: // 卫星图
mMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
case R.id.action_traffic: // 实施交通图
if (isEnable) {
mMap.setTrafficEnabled(false);
isEnable = false;
} else {
mMap.setTrafficEnabled(true);
isEnable = true;
}
break;
case R.id.action_mylocation:
ToMyLoaction();
break;
case R.id.action_overlay:
OverLay();
break;
default:
break;
}
}
private void OverLay() {
mMap.clear();
//需要覆盖物的Maker OverLay
BitmapDescriptor bit = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);
LatLng lat =new LatLng(Latitude, Longitude); //给一个添加覆盖物的坐标
//覆盖物设置
OverlayOptions option = new MarkerOptions().position(lat).icon(bit).zIndex(5);
MapStatusUpdate msu =MapStatusUpdateFactory.newLatLng(lat);
//设置给地图
mMap.setMapStatus(msu);
//构建文字Option对象,用于在地图上添加文字
/*option = new TextOptions()
.bgColor(0xAAFFFF00)
.fontSize(24)
.fontColor(0xFFFF00FF)
.text("我我")
.rotate(-30)
.position(lat);*/
//在地图上添加该文字对象并显示
mMap.addOverlay(option); ///添加图层
}
public class MyBDLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
MyLocationData mLocationData = new MyLocationData.Builder()//
.accuracy(location.getRadius())//
.latitude(location.getLatitude())//
.longitude(location.getLongitude())//
.build();
mMap.setMyLocationData(mLocationData); //把定位的一些数据设置给地图
// 设置定位图标
// MyLocationConfiguration config = new MyLocationConfiguration(
// com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL,
// true, null);
mLat = location.getLatitude();
mLong = location.getLongitude();
//判断是否第一次定位
if (isFirst) {
ToMyLoaction();
isFirst =false;
Toast.makeText(getApplicationContext(), location.getAddrStr(), Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onStart() {
super.onStart();
mMap.setMyLocationEnabled(true);
if (!mLocationClient.isStarted())
mLocationClient.start();
}
@Override
protected void onStop() {
super.onStop();
mMap.setMyLocationEnabled(false);
if(mLocationClient.isStarted())
mLocationClient.stop();
}
}