<html>
<head>
<meta charset="gbk"/>
<title>高德地图API</title>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
</head>
<body>
<div class="ahsyiioh">
<article class="ahsyiioh">
<h1>
高德
开发
Android 定位SDK
开发指南
获取位置
获取定位数据
</h1>
<p class="update-time">更新时间:2017年10月10日</p>
<div class="md-container"><p>获取定位数据之前,需要在 AndroidManifest.xml 文件中进行权限设置,确保定位功能可以正常使用。</p><h2 data-anchor="androidmanifest" id="androidmanifest">第 1 步,配置AndroidManifest.xml</h2><h4>首先,声明Service组件</h4><p>请在application标签中声明service组件,每个app拥有自己单独的定位service。</p><div class="md-atomic"><div class="md-demo-code-wrapper"><div class="md-demo-code-header"><a href="javascript:void(0);" class="active ">Java</a></div><div class="md-demo-code-content"><div class="md-demo-code-content-item active"><pre><code class="java"><service android:name="com.amap.api.location.APSService"></service>
</code></pre></div></div></div></div><h4>然后,声明权限</h4><p>Android 6.0及以上系统可以参考<a href="http://lbs.amap.com/api/android-location-sdk/guide/utilities/permission/" class="" target="">Android 6.0权限说明章节</a>。</p><div class="md-atomic"><div class="md-demo-code-wrapper"><div class="md-demo-code-header"><a href="javascript:void(0);" class="active ">Java</a></div><div class="md-demo-code-content"><div class="md-demo-code-content-item active"><pre><code class="java">
<!--用于进行网络定位-->
<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>
</code></pre></div></div></div></div><h4>最后,设置高德Key</h4><p>在application标签中加入:</p><div class="md-atomic"><div class="md-demo-code-wrapper"><div class="md-demo-code-header"><a href="javascript:void(0);" class="active ">Java</a></div><div class="md-demo-code-content"><div class="md-demo-code-content-item active"><pre><code class="java"><meta-data android:name="com.amap.api.v2.apikey" android:value="key">//开发者申请的key
</meta-data>
</code></pre></div></div></div></div><p><a href="http://lbs.amap.com/dev/#/" class="" target="">点我获取Key</a>。</p><p><a href="http://lbs.amap.com/faq/top/hot-questions/249" class="" target="">点我查看Key注册时必要数据SHA1和包名的获取方法</a>。</p><h2 data-anchor="start-location" id="start-location">第 2 步,初始化定位</h2><p>请在主线程中声明AMapLocationClient类对象,需要传Context类型的参数。推荐用getApplicationContext()方法获取全进程有效的context。</p><div class="md-atomic"><div class="md-demo-code-wrapper"><div class="md-demo-code-header"><a href="javascript:void(0);" class="active ">Java</a></div><div class="md-demo-code-content"><div class="md-demo-code-content-item active"><pre><code class="java">
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
//声明定位回调监听器
public AMapLocationListener mLocationListener = new AMapLocationListener();
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(mLocationListener);
</code></pre></div></div></div></div><h2 data-anchor="configure" id="configure">第 3 步,配置参数并启动定位</h2><p><a href="" class="" target=""><span class="red"><strong>配置单次定位或连续定位也在此处,请仔细阅读。</strong></span></a></p><h4>创建AMapLocationClientOption对象</h4><p>AMapLocationClientOption对象用来设置发起定位的模式和相关参数。</p><div class="md-atomic"><div class="md-demo-code-wrapper"><div class="md-demo-code-header"><a href="javascript:void(0);" class="active ">Java</a></div><div class="md-demo-code-content"><div class="md-demo-code-content-item active"><pre><code class="java">
//声明AMapLocationClientOption对象
public AMapLocationClientOption mLocationOption = null;
//初始化AMapLocationClientOption对象
mLocationOption = new AMapLocationClientOption();
</code></pre></div></div></div></div><h4>选择定位模式</h4><p>高德定位服务包含GPS和网络定位(Wi-Fi和基站定位)两种能力。定位SDK将GPS、网络定位能力进行了封装,以三种定位模式对外开放,SDK默认选择使用高精度定位模式。</p><p><strong>高精度定位模式</strong>:会同时使用网络定位和GPS定位,优先返回最高精度的定位结果,以及对应的地址描述信息。</p><div class="md-atomic"><div class="md-demo-code-wrapper"><div class="md-demo-code-header"><a href="javascript:void(0);" class="active ">Java</a></div><div class="md-demo-code-content"><div class="md-demo-code-content-item active"><pre><code class="java">
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
</code></pre></div></div></div></div><p><strong>低功耗定位模式</strong>:不会使用GPS和其他传感器,只会使用网络定位(Wi-Fi和基站定位);</p><div class="md-atomic"><div class="md-demo-code-wrapper"><div class="md-demo-code-header"><a href="javascript:void(0);" class="active ">Java</a></div><div class="md-demo-code-content"><div class="md-demo-code-content-item active"><pre><code class="java">
//设置定位模式为AMapLocationMode.Battery_Saving,低功耗模式。
mLocationOption.setLocationMode(AMapLocationMode.Battery_Saving);
</code></pre></div></div></div></div><p><strong>仅用设备定位模式</strong>:不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位,自 v2.9.0 版本支持返回地址描述信息。</p><div class="md-atomic"><div class="md-demo-code-wrapper"><div class="md-demo-code-header"><a href="javascript:void(0);" class="active ">Java</a></div><div class="md-demo-code-content"><div class="md-demo-code-content-item active"><pre><code class="java">
//设置定位模式为AMapLocationMode.Device_Sensors,仅设备模式。
mLocationOption.setLocationMode(AMapLocationMode.Device_Sensors);
</code></pre></div></div></div></div><h4>设置单次定位</h4><p>如果您需要使用单次定位,需要进行如下设置:</p><div class="md-atomic"><div class="md-demo-code-wrapper"><div class="md-demo-code-header"><a href="javascript:void(0);" class="active ">Java</a></div><div class="md-demo-code-content"><div class="md-demo-code-content-item active"><pre><code class="java">
//获取一次定位结果:
//该方法默认为false。
mLocationOption.setOnceLocation(true);
//获取最近3s内精度最高的一次定位结果:
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true