Android 天地图定位
程序员文章站
2022-07-02 09:48:43
...
定位工具类
注意请先依赖对应天地图的jar文件之后再使用此类。天地图资源包下载
import android.content.Context;
import android.location.Location;
import com.tianditu.android.maps.GeoPoint;
import com.tianditu.android.maps.MapView;
import com.tianditu.android.maps.MyLocationOverlay;
import javax.microedition.khronos.opengles.GL10;
/**
* 天地图定位
*/
public class SkyLandMapLocation {
/**
* 上下文对象
*/
private Context context;
/**
* 地图对象
*/
private MapView mapView;
/**
* 定位辅助对象
*/
private LocationOverlay overlay;
/**
* 是否开启一次性定位
*/
private boolean onceLocation = true;
/**
* 构造函数
* @param context
* @param mapView
*/
public SkyLandMapLocation(Context context, MapView mapView) {
this.context = context;
this.mapView = mapView;
}
/**
* 获取定位覆盖物
* @return
*/
public LocationOverlay getOverlay() {
return overlay;
}
/**
* 设置定位覆盖物
* @param overlay
*/
public void setOverlay(LocationOverlay overlay) {
this.overlay = overlay;
}
/**
* 是否一次性定位
* @return
*/
public boolean isOnceLocation() {
return onceLocation;
}
/**
* 是否一次性定位
* @param onceLocation
*/
public void setOnceLocation(boolean onceLocation) {
this.onceLocation = onceLocation;
}
/**
* 获取定位监听
* @return
*/
public OnSkyLangLocationChangedListener getListener() {
return listener;
}
/**
* 设置定位监听
* @param listener
*/
public void setListener(OnSkyLangLocationChangedListener listener) {
this.listener = listener;
}
/**
* 开始定位
*/
public void start() {
overlay = new LocationOverlay(context, mapView);
mapView.addOverlay(overlay);
overlay.enableCompass();
overlay.enableMyLocation();
overlay.setGpsFollow(true);
overlay.setVisible(true);
}
/**
* 停止定位
*/
public void stop() {
if (overlay != null) {
if (overlay.isCompassEnabled()) {
overlay.disableCompass();
}
if (overlay.isMyLocationEnabled()) {
overlay.disableMyLocation();
}
}
}
private class LocationOverlay extends MyLocationOverlay {
public LocationOverlay(Context context, MapView mapView) {
super(context, mapView);
}
@Override
public void onLocationChanged(Location location) {
super.onLocationChanged(location);
if (listener != null) {
listener.onSkyLangLocationChanged(location);
}
if (onceLocation) {
stop();
}
}
}
/**
* 定位监听接口
*/
public OnSkyLangLocationChangedListener listener;
public interface OnSkyLangLocationChangedListener {
void onSkyLangLocationChanged(Location location);
}
}
使用
注意6.0以上的权限问题
Manifest.permission.WRITE_EXTERNAL_STORAGE
Manifest.permission.READ_EXTERNAL_STORAGE
Manifest.permission.ACCESS_FINE_LOCATION
Manifest.permission.ACCESS_COARSE_LOCATION
SkyLandMapLocation location = new SkyLandMapLocation(this, mapView);
location.setListener(this);
location.setOnceLocation(true);
location.start();
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
if (location != null) {
location.stop();
}
}
上一篇: STM32使用UCOSII支持低功耗模式