大过年的,先祝大家新年快乐!第二次写文章。写这篇文章,主要是响应慕课网的活动,哈!如果写得不好,欢迎指出错误,一起交流。近些年来,人们的健康越来越受到关注,于是乎,有好多关于健康的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和真机上的一些实例图: