import android.app.Activity; |
import android.os.Bundle; |
import android.view.View; |
import android.view.View.OnClickListener; |
import android.widget.Button; |
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.MapStatusUpdate; |
import com.baidu.mapapi.map.MapStatusUpdateFactory; |
import com.baidu.mapapi.map.MapView; |
import com.baidu.mapapi.map.MyLocationData; |
import com.baidu.mapapi.model.LatLng; |
public class MainActivity extends Activity { |
/** |
* 一个显示地图(数据来自MapABC地图服务)的视图 |
*/ |
private MapView mapView = null ; |
private BaiduMap baiduMap = null ; |
/** |
* 定位相关声明 |
*/ |
public LocationClient locationClient = null ; |
/** |
* 是否首次定位 |
*/ |
private boolean isFirstLoc = true ; |
private boolean isRequest = true ; |
|
/** |
* 手动定位按钮 |
*/ |
private Button mButton; |
@Override |
protected void onCreate(Bundle savedInstanceState) { |
super .onCreate(savedInstanceState); |
// 在使用SDK各组件之前初始化context信息,传入ApplicationContext |
// 注意该方法要再setContentView方法之前实现 |
SDKInitializer.initialize(getApplicationContext()); |
setContentView(R.layout.activity_main); |
|
mButton = (Button) findViewById(R.id.request); |
mButton.setOnClickListener(listener); |
// 获取地图控件引用 |
mapView = (MapView) this .findViewById(R.id.bmapView); |
baiduMap = mapView.getMap(); |
// 去掉地图内置的缩放控件 |
mapView.showZoomControls( false ); |
// 开启定位图层 |
baiduMap.setMyLocationEnabled( true ); |
// 实例化LocationClient类 |
locationClient = new LocationClient(getApplicationContext()); |
// 注册监听函数 |
locationClient.registerLocationListener(myListener); |
// 设置定位参数 |
this .setLocationOption(); |
// 开始定位 |
locationClient.start(); |
// 设置为一般地图 |
baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); |
// baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); // 设置为卫星地图 |
// baiduMap.setTrafficEnabled(true); // 开启交通图 |
} |
/** |
* 定位监听 |
*/ |
public BDLocationListener myListener = new BDLocationListener() { |
@Override |
public void onReceiveLocation(BDLocation location) { |
// map view 销毁后不在处理新接收的位置 |
if (location == null || mapView == null ) |
return ; |
MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius()).direction( 100 ).latitude(location.getLatitude()).longitude(location.getLongitude()).build(); |
baiduMap.setMyLocationData(locData); // 设置定位数据 |
if (isFirstLoc || isRequest) { |
LatLng position = new LatLng(location.getLatitude(), location.getLongitude()); |
// 设置地图中心点以及缩放级别 |
MapStatusUpdate update = MapStatusUpdateFactory.newLatLngZoom(position, 16 ); |
// MapStatusUpdate u = |
// MapStatusUpdateFactory.newLatLng(position); |
baiduMap.animateMapStatus(update); |
|
isRequest = false ; |
} |
isFirstLoc = false ; |
} |
}; |
/** |
* 设置定位参数 |
*/ |
private void setLocationOption() { |
LocationClientOption option = new LocationClientOption(); |
option.setOpenGps( true ); // 打开GPS |
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); // 设置定位模式 |
option.setCoorType( "bd09ll" ); // 返回的定位结果是百度经纬度,默认值gcj02 |
option.setScanSpan( 5000 ); // 设置发起定位请求的间隔时间为5000ms |
option.setIsNeedAddress( true ); // 返回的定位结果包含地址信息 |
option.setNeedDeviceDirect( true ); // 返回的定位结果包含手机机头的方向 |
locationClient.setLocOption(option); |
} |
|
/** |
* 点击的监听事件 |
*/ |
private OnClickListener listener = new OnClickListener() { |
|
@Override |
public void onClick(View v) { |
isRequest = true ; |
locationClient.start(); |
} |
}; |
// 三个状态实现地图生命周期管理 |
@Override |
protected void onResume() { |
super .onResume(); |
mapView.onResume(); |
} |
|
@Override |
protected void onPause() { |
super .onPause(); |
mapView.onPause(); |
} |
|
@Override |
protected void onDestroy() { |
// 退出时销毁定位 |
locationClient.stop(); |
baiduMap.setMyLocationEnabled( false ); |
super .onDestroy(); |
mapView.onDestroy(); |
mapView = null ; |
} |
} |
by: 发表于:2017-12-21 09:49:49 顶(0) | 踩(0) 回复
??
回复评论