百度定位,sdk自备,需下载百度提供的sdk。
下面是简单的有效果的代码,希望初学者看看,还是很有效果的。
一:xml文件中基础地图的布局粘过来
<com.amap.api.maps.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.amap.api.maps.MapView>
二:java代码
public class MainActivity extends Activity implements LocationSource, AMapLocationListener{
MapView mMapView = null;
private AMap aMap;
private AMapLocationClient mLocationClient;
private AMapLocationClientOption mLocationOption;
private OnLocationChangedListener mListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取地图控件引用
mMapView = (MapView) findViewById(R.id.map);
// 在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理
mMapView.onCreate(savedInstanceState);
location();// 刷新的方法
}
// 刷新的方法
public void location() {
if (aMap == null) {
aMap = mMapView.getMap();
// 设置显示定位按钮 并且可以点击
UiSettings settings = aMap.getUiSettings();
aMap.setLocationSource(this);// 设置了定位的监听,这里要实现LocationSource接口
// 是否显示定位按钮
settings.setMyLocationButtonEnabled(true);
aMap.setMyLocationEnabled(true);// 显示定位层并且可以触发定位,默认是flase
}
// 初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
// 设置定位回调监听,这里要实现AMapLocationListener接口,AMapLocationListener接口只有onLocationChanged方法可以实现,用于接收异步返回的定位结果,参数是AMapLocation类型。
mLocationClient.setLocationListener(this);
// 初始化定位参数
mLocationOption = new AMapLocationClientOption();
// 设置定位模式为Hight_Accuracy高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
// 设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
// 设置是否只定位一次,默认为false
mLocationOption.setOnceLocation(false);
// 设置是否强制刷新WIFI,默认为强制刷新
mLocationOption.setWifiActiveScan(true);
// 设置是否允许模拟位置,默认为false,不允许模拟位置
mLocationOption.setMockEnable(false);
// 设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(5000);
// 给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
}
@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();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState
// (outState),实现地图生命周期管理
mMapView.onSaveInstanceState(outState);
}
@Override
public void onLocationChanged(AMapLocation arg0) {
if (mListener != null && arg0 != null) {
if (arg0 != null && arg0.getErrorCode() == 0) {
mListener.onLocationChanged(arg0);// 显示系统小蓝点
double latitude = arg0.getLatitude();
double longitude = arg0.getLongitude();
Marker marker = aMap.addMarker(
new MarkerOptions().position(new LatLng(latitude, longitude)).title(arg0.getAddress())
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.draggable(true));
// 设置默认显示一个infowinfow
marker.showInfoWindow();
} else {
String errText = "定位失败," + arg0.getErrorCode() + ": " + arg0.getErrorInfo();
Log.e("AmapErr", errText);
}
}
}
@Override
public void activate(OnLocationChangedListener arg0) {
mListener = arg0;
if (mLocationClient == null) {
mLocationClient = new AMapLocationClient(this);
mLocationOption = new AMapLocationClientOption();
// 设置定位监听
mLocationClient.setLocationListener(this);
// 设置为高精度定位模式
mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
// 设置定位参数
mLocationClient.setLocationOption(mLocationOption);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
mLocationClient.startLocation();
}
}
@Override
public void deactivate() {
mListener = null;
if (mLocationClient != null) {
mLocationClient.stopLocation();
mLocationClient.onDestroy();
}
mLocationClient = null;
}
}