Android高德地图开发(3)——路况+定位

来源:互联网 发布:使命召唤5枪支数据 编辑:程序博客网 时间:2024/04/29 07:25

在上篇的基础上,我们继续添加路况和定位功能:

1.路况图层显示

高德地图封装了交通路况信息,通过调用AMap 类的方法setTrafficEnabled(),显示路况信息。
在fragment_map中添加路况图层控制按钮

<!--路况图层控制按钮--><CheckBox    android:id="@+id/louk_btn"    android:layout_margin="20dp"    android:layout_alignParentRight="true"    android:layout_width="52dp"    android:button="@color/transparent"    android:background="@drawable/map_traffic"    android:layout_height="52dp" />

在initMap的setUpMap()方法中控制路况图层:

//路况图层触发事件mCBLouk.setOnClickListener(new View.OnClickListener() {    @Override    public void onClick(View v) {        // TODO Auto-generated method stub        //判断路况图层是否显示        if (mCBLouk.isChecked()){            aMap.setTrafficEnabled(true);            mCBLouk.setBackgroundColor(getResources().getColor(R.color.light_gery));            mCBLouk.setButtonDrawable(getResources().getDrawable(R.drawable.map_traffic_hl));        }else{            aMap.setTrafficEnabled(false);            mCBLouk.setBackgroundColor(getResources().getColor(R.color.light_gery));            mCBLouk.setButtonDrawable(getResources().getDrawable(R.drawable.map_traffic));        }    }});

2.定位

2.0以上版本的定位和百度定位类似,专门开启了一个服务去定位,下面主要介绍2.0以上版本的定位:

2.1 首先在manifest.xml文件中配置服务

<service android:name="com.amap.api.location.APSService"></service> 

2.2 在setUpMap(参考上篇)函数中加载startPostion()方法,开始请求定位。

 /** * 开始定位 */public void startPostion() {    // 初始化定位,    mlocationClient = new AMapLocationClient(getActivity().getApplicationContext());    // 初始化定位参数    mLocationOption = new AMapLocationClientOption();    //单次定位    mLocationOption.setOnceLocation(true);    // 设置定位模式为高精度定位    mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);    // 设置定位回调监听    mlocationClient.setLocationListener(this);    // 设置定位参数    mlocationClient.setLocationOption(mLocationOption);    //请求位置    mlocationClient.startLocation();}/** * long类型时间格式化 */public  String convertToTime(long time) {    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    Date date = new Date(time);    return df.format(date);}

2.2 在onLocationChanged中返回定位数据,然后在地图上标注定位图标。

 /** * 混合定位回调函数 */@Overridepublic void onLocationChanged(AMapLocation location) {    if (location != null && location.getErrorCode() == 0) {        Double geoLat = location.getLatitude();        Double geoLng = location.getLongitude();        mMarkerA.setPosition(new LatLng(geoLat, geoLng));        u = CameraUpdateFactory.newLatLngZoom(new LatLng(geoLat, geoLng), 18);        aMap.animateCamera(u);        String cityCode = "";        String desc = "";        Bundle locBundle = location.getExtras();        if (locBundle != null) {            cityCode = locBundle.getString("citycode");            desc = locBundle.getString("desc");        }        String str = ("定位成功:(" + geoLng + "," + geoLat + ")"                + "\n精    度    :" + location.getAccuracy() + "米"                + "\n定位方式:" + location.getProvider() + "\n定位时间:"                + convertToTime(location.getTime()) + "\n城市编码:"                + cityCode + "\n位置描述:" + desc + "\n省:"                + location.getProvince() + "\n市:" + location.getCity()                + "\n区(县):" + location.getDistrict() + "\n区域编码:" + location                .getAdCode());    } else {    }}

2.3 退出时,停止定位服务。

@Overridepublic void onPause() {    super.onPause();    // 停止定位    mlocationClient.stopLocation();}public void onDestroy() {    mlocationClient.onDestroy();    super.onDestroy();}
0 0
原创粉丝点击