本文参考文章:

http://www.apkbus.com/blog-904057-63610.html

本人实现的 定位代码:(具体配置省略,可见参考文章)

package com.example.demo.fuction;

import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log; 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.maps2d.AMap;
import com.amap.api.maps2d.AMapOptions;
import com.amap.api.maps2d.CameraUpdateFactory;
import com.amap.api.maps2d.MapView;
import com.amap.api.maps2d.UiSettings;
import com.amap.api.maps2d.model.BitmapDescriptor;
import com.amap.api.maps2d.model.BitmapDescriptorFactory;
import com.amap.api.maps2d.model.LatLng;
import com.amap.api.maps2d.model.Marker;
import com.amap.api.maps2d.model.MarkerOptions;
import com.joe.ditudemo.R; import static com.amap.api.location.AMapLocationClientOption.AMapLocationMode.Hight_Accuracy; /**
* Created by Joe.
*/ public class GetMyLocationActivity extends AppCompatActivity { //声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
//声明mLocationOption对象
public AMapLocationClientOption mLocationOption = null;
private double lat;
private double lon;
private MapView mapView;
private AMap aMap;//地图控制器对象
private UiSettings mUiSettings; @Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_get_mylocation);
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);//设置其为定位完成后的回调函数
mapView = (MapView) findViewById(R.id.mapView);
mapView.onCreate(savedInstanceState);
init(); } /**
* * 初始化AMap类对象 aMap 地图控制器
*/
private void init() {
if (aMap == null) {
aMap = mapView.getMap();//地图控制器对象
mUiSettings = aMap.getUiSettings();
}
//设置logo位置
mUiSettings.setLogoPosition(AMapOptions.LOGO_POSITION_BOTTOM_CENTER);//高德地图标志的摆放位置
mUiSettings.setZoomControlsEnabled(true);//地图缩放控件是否可见
mUiSettings.setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_BUTTOM);//地图缩放控件的摆放位置
//aMap 为地图控制器对象
aMap.getUiSettings().setMyLocationButtonEnabled(true);//地图的定位标志是否可见
aMap.setMyLocationEnabled(true);//地图定位标志是否可以点击 setUpMap();
} /**
* 配置定位参数
*/
private void setUpMap() { //初始化定位参数
mLocationOption = new AMapLocationClientOption(); //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(Hight_Accuracy); //设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true); //设置是否只定位一次,默认为false
mLocationOption.setOnceLocation(false); //设置是否允许模拟位置,默认为false,不允许模拟位置
mLocationOption.setMockEnable(false); //设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(2000); //给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption); //启动定位
mLocationClient.startLocation();
} public AMapLocationListener mLocationListener = new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (amapLocation != null) {
if (amapLocation.getErrorCode() == 0) { Log.v("getLocationType", ""+amapLocation.getLocationType() ) ;
lat = amapLocation.getLatitude();
lon = amapLocation.getLongitude(); Log.v("getAccuracy", ""+amapLocation.getAccuracy()+" 米");//获取精度信息
Log.v("joe", "lat :-- " + lat + " lon :--" + lon);
Log.v("joe", "Country : " + amapLocation.getCountry() + " province : " + amapLocation.getProvince() + " City : " + amapLocation.getCity() + " District : " + amapLocation.getDistrict());
//清空缓存位置
aMap.clear(); // 设置显示的焦点,即当前地图显示为当前位置
aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 18));
//aMap.moveCamera(CameraUpdateFactory.zoomTo(18));
//aMap.moveCamera(CameraUpdateFactory.newLatLng(new LatLng(lat, lon))); MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(new LatLng(lat, lon));
markerOptions.title("我的位置");
markerOptions.visible(true);
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.icon_location));
markerOptions.icon(bitmapDescriptor);
markerOptions.draggable(true);
Marker marker = aMap.addMarker(markerOptions);
marker.showInfoWindow();
} else {
//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
Log.e("joe", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
}
}
}
}; /**
* 重新绘制加载地图
*/
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
} /**
* 暂停地图的绘制
*/
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
} /**
* 保存地图当前的状态方法必须重写
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
} /**
* 销毁地图
*/
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
if (mLocationClient != null) {
mLocationClient.stopLocation();
mLocationClient.onDestroy();
}
mLocationClient = null;
}
}

以上代码亲测可行,不过有些不必要的设置没有加,下面给出一些没有加入的代码:

// 设置定位请求超时时间,默认为30秒
// 单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。
mLocationOption.setHttpTimeOut(50000);
// 设置是否开启定位缓存机制
// 缓存机制默认开启,可以通过以下接口进行关闭。
// 当开启定位缓存功能,在高精度模式和低功耗模式下进行的网络定位结果均会生成本地缓存,不区分单次定位还是连续定位。GPS定位结果不会被缓存。
// 关闭缓存机制
mLocationOption.setLocationCacheEnable(false);
// 设置是否只定位一次,默认为false
mLocationOption.setOnceLocation(false);
// 给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);

上面的  setHttpTimeOut  方法  是设置定位请求协议中的  http 超时的情况下的超时时间,  这里个人认为这是采用Wifi定位设置时采用的交互协议。

mLocationOption.setOnceLocation(false);   该方法是设置 定位 是否是只定位一次 ,也或者是会连续定位。
mLocationOption.setLocationCacheEnable(false);     定位的缓存结果设置选项
本人所写的代码某次运行后 打印的定位类型信息如下:

个人估计, 如果设置缓存后, APP 会把定位信息写到缓存中, APP再次运行后如果在某个设定的时间内缓存中有定位信息则会先读取缓存中的定位信息。

由于  本人做试验的时候是在室内, gps定位效果不佳于是默认转为了 wifi定位, 这时候提示的定位信息为  5  。

然后由于后面的定位都是连续的比较紧,在2000ms左右就又一次请求定位, 而且并没有水平移动(手机的位移传感器可以度量),于是直接采用前次的定位信息,这时的定位类型为  2  。

Android 编程 高德地图 (实现显示地图以及定位功能)的更多相关文章

  1. Android百度地图之显示地图

    添加地图显示 一.在百度官网下载相关的SDK (网址:http://developer.baidu.com/map/sdkandev-download.htm) 解压下载好的BaiduMap_Andr ...

  2. Android 百度地图开发(二)--- 定位功能之MyLocationOverlay,PopupOverlay的使用

    转载请注明出处http://blog.csdn.net/xiaanming/article/details/11380619 这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOv ...

  3. 【第三方SDK】百度地图实现最简单的定位功能(无地图界面)

    在近期的项目中,须要实现无地图界面的定位功能,定位用户所在的城市.因此,本篇文章,主要介绍怎样使用百度地图SDK实现无导航界面的定位功能. 1.申请百度开发人员账户 2.创建应用,获取key 例如以下 ...

  4. Android编程 高德地图 中如何重写 定位按键 的触发事件 (com.amap.api.maps2d.LocationSource)点击定位后不仅定位在地图中心点上而且可以设置地图的缩放大小和提示

    在利用高德地图来编写自己的APP的时候,发现了一种对定位按键的重写方法,那就是利用   com.amap.api.maps2d.LocationSource  接口来重写. 什么是定位按键呢,下图中右 ...

  5. Android编程 高德地图 AMapLocationClientOption 类中 setWifiActiveScan过时

    高德地图中   定位包中有以下方法: AMapLocationClientOption  类中  setWifiActiveScan  过时 isWifiActiveScan public boole ...

  6. Android编程之仿微信显示更多文字的View

    微信朋友圈中,如果好友发表的文字过长,会自动收缩起来,底下有提示,当点击“显示更多”时才会展开. 首先定义布局文件(很简单,不解释): <?xml version="1.0" ...

  7. 地图之CLLocationManager的使用 定位功能使用

    1.iOS8曾经使用CLLocationManager 1.导入头文件 <CoreLocation/CoreLocation.h> 2.创建位置管理者 CLLocationManager ...

  8. Android开发10:传感器器及地图相关应用

    前言 啦啦啦~各位小伙伴们好~经过这一学期的Android知识的学习,我们学到了很多和Android开发相关的知识,这一学期的学习也要告一段落了. 一起进入我们今天的相关内容~这次我们将一起学习使用 ...

  9. android studio高德地图的显示于定位(附带逆地理编码围栏)

    首先注册高德成为开发者(打开高德地图,点击底部的开发者平台),创建应用,按照要求填写相应信息 网站:http://lbs.amap.com/api/android-sdk/guide/create-p ...

随机推荐

  1. 解题报告:poj2689 Prime Distance

    2017-10-03 11:29:20 writer:pprp 来源:kuangbin模板 从已经筛选好的素数中筛选出规定区间的素数 /* *prime DIstance *给出一个区间[L,U],找 ...

  2. 2017 beijing icpc A - Euler theorem

    2017-09-22 21:59:43 writer:pprp HazelFan is given two positive integers a,ba,b, and he wants to calc ...

  3. P4开源Tutorials教程样例实战及对P4v1.1规范的初分析

    Github链接:Github-P4Lang-Tutorials-p4v1.1 前言 本文主要对Barefoot开源教程中的p4v1.1实例simple_router的实战步骤进行记录与阐述,希望能帮 ...

  4. SSH 登录时出现如下错误:Host key verification failed

       注意:本文相关 Linux 配置及说明已在 CentOS 6.5 64 位操作系统中进行过测试.其它类型及版本操作系统配置可能有所差异,具体情况请参阅相应操作系统官方文档. 问题描述 使用 SS ...

  5. window 中安装 redis的遇到的一此bug

    一.下载 链接:https://github.com/MicrosoftArchive/redis/releases   说明: 如果是是下载msi版本的话会默认帮我们配置好测试 环境,如果是下载zi ...

  6. SVM(三)线性支持向量机

    本文是在微信公众号发表的原创~ 额,图片粘不过来~就把链接给你们吧 http://mp.weixin.qq.com/s?__biz=MjM5MzM5NDAzMg==&mid=400740076 ...

  7. hdu 1241 搬寝室 水dp

    搬寝室 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Desc ...

  8. Runtime.getRuntime.exec();

    杀死Chrome浏览器进程 private static void closeAllChrome() throws IOException{ Runtime.getRuntime().exec(&qu ...

  9. AngularJS 教程 - CodePreject

    http://www.codeproject.com/Articles/1065838/AngularJS-Tutorial Article Series Tutorial 1: Angular JS ...

  10. IIS优化整理

    IIS 之 在IIS7.IIS7.5中应用程序池最优配置方案 找到Web站点对应的应用程序池,“应用程序池” → 找到对应的“应用程序池” → 右键“高级设置...” 一.一般优化方案 1.基本设置 ...