手记

笔记与实例:轨迹记录APP

大过年的,先祝大家新年快乐!第二次写文章。写这篇文章,主要是响应慕课网的活动,哈!如果写得不好,欢迎指出错误,一起交流。近些年来,人们的健康越来越受到关注,于是乎,有好多关于健康的APP出现了。而我的这个实例是关于记录运动轨迹的,一般记录轨迹会结合计步器进行整合,这里我只介绍轨迹记录,计步器暂时跳过。
现在比较火的LBS-SDK有高德和百度,我这里用的是高德。
相关课程笔记(课程地址:http://www.imooc.com/learn/341):
1,

配置工程什么的官网上非常详细,这里我直接贴上我的代码,这里使用的是最新的SDK可能和老师的课程有些不同..
1,先调用地图
2,设置相关定位属性
3,实现定位监听
4,绘制轨迹路线

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
        <com.amap.api.maps.MapView
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            />
</LinearLayout>
package com.zone.library;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.Toast;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdate;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.Polyline;
import com.amap.api.maps.model.PolylineOptions;
import java.util.ArrayList;
import java.util.List;

public class Amap extends Activity implements AMapLocationListener {
    private MapView mapView;
    private AMap aMap;
    public AMapLocationClient client;
    public AMapLocationClientOption aMapLocationClientOption;
    private List<LatLng> list;
    Polyline polyline;
    Marker marker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.amap);
        mapView = (MapView) findViewById(R.id.map);
        aMap = mapView.getMap();
        list = new ArrayList<>();
//      用于收集LatLng位置数据
        mapView.onCreate(savedInstanceState);
//      调用地图所必须
        client = new AMapLocationClient(getApplicationContext());
//      声明AMapLocationClient类对象
        aMapLocationClientOption = new AMapLocationClientOption();
//       声明定位参数
        aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
 //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
        aMapLocationClientOption.setNeedAddress(true);
        //设置是否返回地址信息(默认返回地址信息)
        aMapLocationClientOption.setOnceLocation(false);
        //设置是否只定位一次,默认为false
        aMapLocationClientOption.setWifiActiveScan(true);
//设置是否强制刷新WIFI,默认为强制刷新
        aMapLocationClientOption.setMockEnable(true);
        //设置是否允许模拟位置,默认为false,不允许模拟位置
        aMapLocationClientOption.setInterval(2000);
        //设置定位间隔,单位毫秒,默认为2000ms
        client.setLocationOption(aMapLocationClientOption);
        //给定位客户端对象设置定位参数
        client.startLocation();
//      开始定位
        client.setLocationListener(this);

    }

    @Override
    protected void onDestroy() {
        mapView.onDestroy();
        //      调用地图所必须
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        mapView.onPause();
        //      调用地图所必须
        super.onPause();
    }

    @Override
    protected void onResume() {
        mapView.onResume();
        //      调用地图所必须
        super.onResume();
    }

    @Override
    public void onLocationChanged(AMapLocation aMapLocation) {
        Toast.makeText(Amap.this, "正在定位", Toast.LENGTH_SHORT).show();
//        检测一下你当前是否正在定位
        LatLng latLng = new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude());
//      获取你当前的位置信息
        if (aMapLocation.getLatitude() == 0.0 && aMapLocation.getLongitude() == 0.0) {
            Toast.makeText(Amap.this, "请检查网络", Toast.LENGTH_SHORT).show();
//            当网络有问题或者刚开始定位的时候会出现经纬度为0的情况,这里进行过滤
        } else {
            list.add(0, latLng);
        }

        polyline = aMap.addPolyline(new PolylineOptions().color(Color.RED));
        polyline.setPoints(list);
//        绘制轨迹

        if (marker != null) {
            marker.remove();
        }
        marker = aMap.addMarker(new MarkerOptions().position(list.get(0))
                .anchor(0.5f, 0.5f).icon(BitmapDescriptorFactory.fromResource(R.drawable.icon_gcoding)));
//      在你的当前位置绘制一个红点,标出你所在的位置,并且会随着你位置的移动而移动

        CameraUpdate update = CameraUpdateFactory.newLatLngZoom(list.get(0), 16.3f);
        aMap.animateCamera(update);
//        以你当前的位置为中心,并且地图大小级别为16.3
    }
}

genymotion和真机上的一些实例图:

2人推荐
随时随地看视频
慕课网APP