显示当前定位

腾讯地图 SDK 并不包含定位功能,只提供展示定位的组件,方便用户在获得到定位信息后在地图上展示出来。用户可以接入 腾讯定位 SDK 获得腾讯提供的定位能力。

定位图标的基本设置以及说明如下:

/**
 * 有关定位的一些初始化设置
 */
private void initLocation(){
    // 用于访问腾讯定位服务的类, 周期性向客户端提供位置更新
    TencentLocationManager locationManager = TencentLocationManager.getInstance(this);
    // 设置坐标系
    locationManager.setCoordinateType(TencentLocationManager.COORDINATE_TYPE_WGS84);
    // 创建定位请求
    TencentLocationRequest locationRequest = TencentLocationRequest.create();
    // 设置定位周期(位置监听器回调周期)为10s
    locationRequest.setInterval(10000);
    // 地图上设置定位数据源
    tencentMap.setLocationSource(this);
    // 设置当前位置可见
    tencentMap.setMyLocationEnabled(true);
    // 设置定位图标样式
    setLocMarkerStyle();
}

/**
 * 设置定位图标样式
 */
private void setLocMarkerStyle(){
    locationStyle = new MyLocationStyle();
    // 创建图标
    BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(getBitMap(R.drawable.navi_marker_location));
    locationStyle.icon(bitmapDescriptor);
    // 设置定位圆形区域的边框宽度
    locationStyle.strokeWidth(3);
    // 设置圆区域的颜色
    locationStyle.fillColor(R.color.style);
    tencentMap.setMyLocationStyle(locationStyle);
}

开启/移除定位事件监听器:

@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
    locationChangedListener = onLocationChangedListener;

    int err = locationManager.requestLocationUpdates(locationRequest, this, Looper.myLooper());
    switch (err) {
        case 1:
            Toast.makeText(this,"设备缺少使用腾讯定位服务需要的基本条件",Toast.LENGTH_SHORT).show();
            break;
        case 2:
            Toast.makeText(this,"manifest 中配置的 key 不正确",Toast.LENGTH_SHORT).show();
            break;
        case 3:
            Toast.makeText(this,"自动加载libtencentloc.so失败",Toast.LENGTH_SHORT).show();
            break;

        default:
            break;
    }
}

@Override
public void deactivate() {
    locationManager.removeUpdates(this);
    locationManager = null;
    locationRequest = null;
    locationChangedListener=null;
}

对当前定位状态的监听实现:

/**
 * 实现位置改变的监听
 * @param tencentLocation
 * @param i
 * @param s
 */
@Override
public void onLocationChanged(TencentLocation tencentLocation, int i, String s) {

    if(i == TencentLocation.ERROR_OK && locationChangedListener != null) {
        Location location = new Location(tencentLocation.getProvider());
        // 设置经纬度以及精度
        location.setLatitude(tencentLocation.getLatitude());
        location.setLongitude(tencentLocation.getLongitude());
        location.setAccuracy(tencentLocation.getAccuracy());
        locationChangedListener.onLocationChanged(location);

        // 显示回调的实时位置信息
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 打印tencentLocation的json字符串
                Toast.makeText(getApplicationContext(), new Gson().toJson(location), Toast.LENGTH_LONG).show();
            }
        });
    }
}

/**
 * GPS, WIFI, Radio等状态发生变化的监听
 * @param s
 * @param i
 * @param s1
 */
@Override
public void onStatusUpdate(String s, int i, String s1) {
    // GPS, WiFi, Radio 等状态发生变化
    Log.v("State changed", s +"===" + s1);
}

具体关于定位的样例Demo可以参考TencentMapDemo项目中LocationLayerActivity.java文件。

results matching ""

    No results matching ""