集成高德地图SDK实现实时定位
来源:互联网 发布:pure music mac 破解 编辑:程序博客网 时间:2024/05/16 07:00
因为项目需要地理定位,采用了高德地图的SDK。在这里记录下步骤。
第一步:去高德API注册开发者信息。https://id.amap.com/register/ 然后填写开发者信息。成功之后的界面是这样的。点击添加Key。
然后会弹出一个界面如下:
我的开发环境是Android studio。然后打开Android studio。找到如图的help。点击查找Find Action。然后输入Terminal。
接下来我们可以看到我们的Terminal终端。或者直接在左下角可以看到我们的终端控制台。首先cd C:\user\xxx\.android
然后运行keytool -v -list -keystore debug.keystore可以得到你的SHA1.
ok了然后我们就可以把上面的SHA1的值复制到图2上面去。然后保存。就会得到如图1。
第二步:下载SDK开发包。里面是一个demo和jar包还有API文件。咱们只需要把jar包复制到你的lib下。Android studio在build.gradle目录下添加如下代码:
compile files('libs/AMap_Location_V3.0.0_20160922.jar')
这样,jar包就成功导入了。
第三步:对高德的导入进行配置,在AndroidManifest.xml的<application>标签里进行如下配置。
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <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_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> <!--高德地图配置部分--> <meta-data android:name="com.amap.api.v2.apikey" android:value="e2c5e5e53f55b03a8da60ceb0574d45d"/> <!--高德地图配置service--> <service android:name=".service.GaodeMapService"/><span style="white-space:pre"></span>...<pre name="code" class="java"><application这个Service是用来后台定位的。大家如果需要就添加创建一个Service并且进行配置。
第四步:创建一个MapUtils.java工具类。具体代码如下:
public class MapUtils {/** * 开始定位 */public final static int MSG_LOCATION_START = 0;/** * 定位完成 */public final static int MSG_LOCATION_FINISH = 1;/** * 停止定位 */public final static int MSG_LOCATION_STOP= 2;public final static String KEY_URL = "URL";public final static String URL_H5LOCATION = "file:///android_asset/location.html";/** * 根据定位结果返回定位信息的字符串 * @param loc * @return */public synchronized static String getLocationStr(AMapLocation location){if(null == location){return null;}StringBuffer sb = new StringBuffer();//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明if(location.getErrorCode() == 0){sb.append("定位成功" + "\n");sb.append("定位类型: " + location.getLocationType() + "\n");sb.append("经 度 : " + location.getLongitude() + "\n");sb.append("纬 度 : " + location.getLatitude() + "\n");sb.append("精 度 : " + location.getAccuracy() + "米" + "\n");sb.append("提供者 : " + location.getProvider() + "\n");if (location.getProvider().equalsIgnoreCase(android.location.LocationManager.GPS_PROVIDER)) {// 以下信息只有提供者是GPS时才会有sb.append("速 度 : " + location.getSpeed() + "米/秒" + "\n");sb.append("角 度 : " + location.getBearing() + "\n");// 获取当前提供定位服务的卫星个数sb.append("星 数 : "+ location.getSatellites() + "\n");} else {// 提供者是GPS时是没有以下信息的sb.append("国 家 : " + location.getCountry() + "\n");sb.append("省 : " + location.getProvince() + "\n");sb.append("市 : " + location.getCity() + "\n");sb.append("城市编码 : " + location.getCityCode() + "\n");sb.append("区 : " + location.getDistrict() + "\n");sb.append("区域 码 : " + location.getAdCode() + "\n");sb.append("地 址 : " + location.getAddress() + "\n");sb.append("兴趣点 : " + location.getPoiName() + "\n");//定位完成的时间sb.append("定位时间: " + formatUTC(location.getTime(), "yyyy-MM-dd HH:mm:ss") + "\n");}} else {//定位失败sb.append("定位失败" + "\n");sb.append("错误码:" + location.getErrorCode() + "\n");sb.append("错误信息:" + location.getErrorInfo() + "\n");sb.append("错误描述:" + location.getLocationDetail() + "\n");}//定位之后的回调时间sb.append("回调时间: " + formatUTC(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") + "\n");return sb.toString();}private static SimpleDateFormat sdf = null;public synchronized static String formatUTC(long l, String strPattern) {if (TextUtils.isEmpty(strPattern)) {strPattern = "yyyy-MM-dd HH:mm:ss";}if (sdf == null) {try {sdf = new SimpleDateFormat(strPattern, Locale.CHINA);} catch (Throwable e) {}} else {sdf.applyPattern(strPattern);}return sdf == null ? "NULL" : sdf.format(l);}}
第五步:在Activity中进行位置定位。具体代码如下:
//得到地理位置方法 private synchronized void getLocation(Context context){ Log.e("TAG","正在执行获取getLocation方法"); //声明AMapLocationClient类对象 AMapLocationClient mLocationClient = null; AMapLocationClientOption locationClientOption = new AMapLocationClientOption(); //设置为高精度 locationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置默认返回地址 locationClientOption.setNeedAddress(true); //设置是否只定位一次 locationClientOption.setOnceLocation(true); if(locationClientOption.isOnceLocation()){ locationClientOption.setOnceLocationLatest(true); } //设置是否强制刷新WiFi locationClientOption.setWifiActiveScan(true); //设置是否允许模拟位置,默认为false,不允许模拟位置 locationClientOption.setMockEnable(true); //设置定位间隔,单位毫秒,默认为2000ms locationClientOption.setInterval(2000); //初始化定位 mLocationClient = new AMapLocationClient(context); //为定位进行设置 mLocationClient.setLocationOption(locationClientOption); //设置定位回调监听 mLocationClient.setLocationListener(mAMapLocationListener); //启动定位 mLocationClient.startLocation(); } AMapLocationListener mAMapLocationListener = new AMapLocationListener(){ @Override public void onLocationChanged(AMapLocation amapLocation) { if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) { s = MapUtils.getLocationStr(amapLocation); edt_show_location.setText(s); } } } };在上面代码中,首先获取一个获取位置的服务类AMapLocationClient对象,然后获取一个配置AMapLocationClientOption类对象进行配置。然后把这样我们就获取了我们的地理位置。然后我们可以自行对获取到的信息进行截取。地理位置获取的形式如下:AMapLocationClientOption的设置结果设置到AMapLocationClient对象中。然后开始获取定位。结果会在回调接口中获取到。
好了,上面我们就完成了一次地理定位了。代码要注意的一点回调接口是采用异步的回调,需要把回调放在方法外面实例化。为的就在监听中进行UI的更新,请看上面的代码。Android6.0需要进行运行权限检查。
具体请看SDK中的Demo里面权限检查类用法。
1 0
- 集成高德地图SDK实现实时定位
- Android之高德地图定位SDK集成及地图功能实现
- 使用高德定位SDK实时定位
- 利用高德地图SDK实现基本的定位
- 利用高德地图SDK实现基本的定位
- Unity3D 集成 高德地图SDK 地图
- 高德地图定位SDK集成keystore遇坑及解决方案
- Android 高德地图SDK(定位)
- binbinyang--高德地图SDK--(1.定位)
- android高德地图定位集成
- 高德地图集成之基础定位
- Andorid 集成高德地图显示,定位
- 高德定位地图的集成
- 实现高德地图定位
- 高德地图实现定位
- 获取高德地图SDK制作小程序实时地图
- Android第三方框架之学习高德地图SDK-----①集成环境,获取定位信息,地图显示。
- 高德地图中实现实时定位、驾车路线规划,点间距
- Python 进阶_OOP 面向对象编程_类属性和方法
- SRM144_DIV2
- hc05蓝牙模块学习笔记
- C++ 数据封装
- python交互式登陆远录机器并令其关机
- 集成高德地图SDK实现实时定位
- 查找整数
- Ubuntu下安装Lamp
- 关于setLayoutParams报错
- C++接口(抽象类)
- 大数加法
- cmake 常用变量和常用环境变量查表手册---整理
- Filter过滤器快速入门
- 音频信号中采样率和比特率以及采样编码的问题