废话不多说,首先去高德地图的API上获取key(这一步很重要),因为没有KEY是无法获取高德地图的。

  1. 首先这是高德地图API的网址https://lbs.amap.com/,可以点击进去获取自己的key.这个流程在高德API上都是有教程的。
  2. 在AndroidManifest.xml中获取定位为权限
     <!--用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><!--用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><!--用于获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!--用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!--用于访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET"></uses-permission><!--用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><!--用于写入缓存数据到扩展存储卡--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><!--用于申请调用A-GPS模块--><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission><!--用于申请获取蓝牙信息进行室内定位--><uses-permission android:name="android.permission.BLUETOOTH"></uses-permission><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
  3. 在Layout中设置xml文件
     <com.amap.api.maps.MapViewandroid:id="@+id/mapView"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="40dp"app:layout_constraintTop_toBottomOf="@id/offlineMap"tools:ignore="MissingConstraints"tools:layout_editor_absoluteX="31dp"></com.amap.api.maps.MapView>
  4. 直接上我的代码然后注释给的很清楚

    public class SportActivity extends AppCompatActivity {private static final String TAG = "MainActivity";private MapView mapView;private AMap aMap;private TextView offlineMap, record;private AMapLocationClient mLocationClient;private AMapLocationClientOption mLocationOption;private LocationSource.OnLocationChangedListener mListener;private AMapLocation privLocation;private SportMyView sportMyView;private double distance;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.sport_avtivity);//初始化DBFlowFlowManager.init(new FlowConfig.Builder(this).build());FlowManager.init(this);mapView = findViewById(R.id.mapView);mapView.onCreate(savedInstanceState);// 调用地图所必须重写if (aMap == null) {aMap = mapView.getMap();}aMap.getUiSettings().setZoomControlsEnabled(false);aMap.moveCamera(CameraUpdateFactory.zoomTo(15));aMap.setMapTextZIndex(2);setUpMap();init();insertModel();}private void setUpMap() {/*** 设置一些amap的属性*/UiSettings uiSettings = aMap.getUiSettings();uiSettings.setCompassEnabled(true);// 设置指南针是否显示uiSettings.setZoomControlsEnabled(true);// 设置缩放按钮是否显示uiSettings.setScaleControlsEnabled(true);// 设置比例尺是否显示uiSettings.setRotateGesturesEnabled(true);// 设置地图旋转是否可用uiSettings.setTiltGesturesEnabled(true);// 设置地图倾斜是否可用uiSettings.setMyLocationButtonEnabled(false);// 设置默认定位按钮是否显示/** 自定义系统定位小蓝点**/MyLocationStyle myLocationStyle = new MyLocationStyle();aMap.setMyLocationStyle(myLocationStyle);aMap.setLocationSource(mLocationSource);// 设置定位监听aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false}/*** 进入历史详情和地图管理页面*/private void init() {offlineMap = findViewById(R.id.offlineMap);offlineMap.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(SportActivity.this, OfflineMapActivity.class);startActivity(intent);}});//历史记录record = findViewById(R.id.record);record.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(SportActivity.this, RecordActivity.class);startActivity(intent);}});}public LocationSource mLocationSource = new LocationSource() {@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mListener = onLocationChangedListener;sportMyView = findViewById(R.id.sportMyView);sportMyView.setVisibility(View.INVISIBLE);sportMyView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//初始化定位initAmapLocation();}});sportMyView.setVisibility(View.VISIBLE);}@Overridepublic void deactivate() {mListener = null;if (mLocationClient != null) {mLocationClient.stopLocation();mLocationClient.onDestroy();}mLocationClient = null;}};/*** 初始化定位*/private void initAmapLocation() {//初始化定位mLocationClient = new AMapLocationClient(this);//设置定位回调监听mLocationClient.setLocationListener(mAMapLocationListener);//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();// 设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景)mLocationOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.Transport);//设置定位模式为AMapLocationMode.Hight_Accuracy,设备定位模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。mLocationOption.setInterval(2000);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。mLocationOption.setHttpTimeOut(20000);if (null != mLocationClient) {mLocationClient.setLocationOption(mLocationOption);//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效mLocationClient.startLocation();}}/*** 定位回调每1秒调用一次*/public AMapLocationListener mAMapLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (amapLocation != null) {if (amapLocation.getErrorCode() == 0) {mListener.onLocationChanged(amapLocation);// 显示系统小蓝点,不写这一句无法显示到当前位置amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表Log.e(TAG, "获取经纬度集合" + privLocation);//打Log记录点是否正确amapLocation.getAccuracy();//获取精度信息amapLocation.getBearing();//获取方向角信息amapLocation.getSpeed();//获取速度信息  单位:米/秒amapLocation.getLocationType();//查看是什么类型的点Log.e(TAG, "获取点的类型" + amapLocation.getLocationType());if (amapLocation.getLocationType() == 1) {Location location = new Location();location.latitude = amapLocation.getLatitude();location.longitutd = amapLocation.getLongitude();drawLines(amapLocation);//一边定位一边连线distance += distance;Toast.makeText(SportActivity.this, "经纬度"+distance+"KM",Toast.LENGTH_SHORT).show();Log.e("DDDDDDDDD", String.valueOf(distance));Log.e(TAG, "获取点的类型" + amapLocation.getLocationType());Log.e("LLLLL", String.valueOf(location.latitude));Log.e("LLLLLLLL", String.valueOf(location.longitutd));}//获取定位时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(amapLocation.getTime());sdf.format(date);privLocation = amapLocation;} else {//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo());}}}};/*** 绘制运动路线** @param curLocation*/public void drawLines(AMapLocation curLocation) {if (null == privLocation) {return;}PolylineOptions options = new PolylineOptions();//上一个点的经纬度options.add(new LatLng(privLocation.getLatitude(), privLocation.getLongitude()));//当前的经纬度options.add(new LatLng(curLocation.getLatitude(), curLocation.getLongitude()));options.width(10).geodesic(true).color(Color.GREEN);aMap.addPolyline(options);//距离的计算distance = AMapUtils.calculateLineDistance(new LatLng(privLocation.getLatitude(),privLocation.getLongitude()), new LatLng(curLocation.getLatitude(),curLocation.getLongitude()));}/*** 向数据库中传递数据*/private void insertModel() {MyDataBase myDatabase = new MyDataBase();myDatabase.averagespeed = "100";myDatabase.duration = "23";myDatabase.distance = distance;myDatabase.time = "2018-10-23";//myDatabase.save();Log.e("TEST", String.valueOf(myDatabase.averagespeed));Log.e("Sunday", String.valueOf(myDatabase.id));Log.e("Location", String.valueOf(myDatabase.location));}/*** 必须重写的方法*/@Overrideprotected void onDestroy() {mapView.onDestroy();super.onDestroy();}/*** 必须重写的方法*/@Overrideprotected void onPause() {mapView.onPause();super.onPause();}/*** 必须重写的方法*/@Overrideprotected void onResume() {mapView.onResume();super.onResume();}
    }

    上面的代码中直接复制就行,泛红的方法删除就可以是用了。

  5. 其实高德地图定位有三种模式:基站定位、Wi-Fi定位、GPS定位。其中基站,精度在500米-5000米之间、Wi-Fi定位精度较高,在5米-200米之间、GPS精度较高,在10米-100米左右。所以记录运动轨迹是一般会把基站定位和Wi-Fi定位的点过滤掉,这样就很少飘点。

  6. 写的不好请指教。

  7. 文章地址:https://github.com/xindiyang/coddonGMap.git

基于Android的高德地图的定位和运动轨迹记录的功能相关推荐

  1. android 图片运动轨迹,基于Android的高德地图的定位和运动轨迹记录的功能

    直接上我的代码然后注释给的很清楚 public class SportActivity extends AppCompatActivity { private static final String ...

  2. 计算机设计基于Android实现高德地图校内导航出行app【项目源码+简要论文说明】

    基于Android实现高德地图校内导航出行app项目演示 如今手机的发展非常迅速,手机越来越成为人们不可缺少的东西.手机从最初功能简单的功能机,发展到如今几乎无所不能的智能机,满足了人们的日常需求,手 ...

  3. 基于Android实现高德地图校内导航出行app项目演示【项目源码+简要论文说明】分享

    基于Android实现高德地图校内导航出行app项目演示 如今手机的发展非常迅速,手机越来越成为人们不可缺少的东西.手机从最初功能简单的功能机,发展到如今几乎无所不能的智能机,满足了人们的日常需求,手 ...

  4. Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS

    /*** 判断定位服务是否开启** @param* @return true 表示开启*/ public static boolean isLocationEnabled(Context contex ...

  5. Android使用高德地图api实现基础定位

    Android使用高德地图api实现基础定位(一) 关于 会获取SHA1的可自行跳过这一步 第二步引用高德sdk 第三步修改MainActivity.java 关于 这篇主要讲如何使用高德sdk(不是 ...

  6. android使用高德地图SDK获取定位信息

    注册账号.创建应用.获取API KEY等这些就不说了,按照官网来就行,我们来讲讲项目的配置及示例代码. 高德地图获取定位信息配置要比百度地图简单多了,这是我比较喜欢的一点,而且之前用百度地图嵌入一个应 ...

  7. Android Studio之高德地图实现定位和3D地图显示

    在应用开发中,地图开发是经常需要使用的"组件",国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码 ...

  8. android高德地图默认当前位置,【报Bug】1.9.2 android 高德地图无法定位到当前位置...

    详细问题描述 (DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题) [内容] 1.9.2版本 a ...

  9. android室内定位+3d,基于Android平台的手机室内定位及导航的设计与实现

    摘要: 随着无线通信网络技术的发展,智能手机逐渐融入到人们的日常生活中.它不仅满足当今人们对于通话短信等基本功能的需求,而且还满足人们对于娱乐.上网.社交等功能的需求.导航功能是现在人们常用的一个功能 ...

最新文章

  1. 计算机网络知到马惜平答案,计算机网络实习用Dreamweaver搭建个人网站
  2. 利用JBPM4.4的AssignmentHandler实现用户角色整合另一种构思
  3. java开发http协议接口_java开发接口利用http协议传输数据
  4. 文本分析用GUI界面显示
  5. 有效解决vue动态绑定多个class的官方实例语法无效的问题
  6. android 模拟器测试之旅
  7. 雕虫小技 - 签名图片生成器
  8. android8.1如何升级,关于android8.1实现多个app升级时的注意事项
  9. 在‘句子迷’爬取网友总结的方文山歌词并作词频统计
  10. 计算机毕业优秀作品展观后感,毕业设计作品展观后感
  11. websocket简单聊天室
  12. 刚入职的新人如何快速了解公司业务
  13. 852955-00-1,Cyclo(D-Trp-Tyr),大环化合物
  14. 【软件架构】Michael Perry关于不可变架构、CAP定理和CRDTs
  15. open cv均值 中值 高斯 双边高斯 滤波及模糊
  16. AIoT时代存储如何升级?长江存储发布高速闪存芯片UFS 3.1
  17. 陆奇新东家落定,YC入华将开创另类创投
  18. File size exceeds....(文件大小超过限制处理)
  19. wireshark抓包常用命令
  20. 尚观第15天nagios安装配置

热门文章

  1. 使用亚博智能K210实现人脸特征提取和识别
  2. 闭关六个月整理出来的微机原理知识点(特别适用河北专接本)
  3. 【自然语言处理概述】文本词频分析
  4. Jupyter制作slides
  5. java毕业生设计爱心公益网站设计与制作计算机源码+系统+mysql+调试部署+lw
  6. 婚纱预订小程序开发,商家线上展示平台
  7. 福建福州软考考点安排在哪?
  8. java socket ascii_TCP套接字上的ASCII - java
  9. 全民开发者时代到来!华为云开发者日深圳站成功举办
  10. “全民创业”是新时代的上山下乡