android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)
Android开发项目时常常会遇到定位这个功能, 很久以前写过一篇了,官方也更新了一些东西,我也更新下
以前使用的是jar包 导入来实现高德定位
老版本 链接:https://www.cnblogs.com/zhangqie/p/6438400.html
现在通过Gradle集成SDK(也可以使用jar包)
//定位依赖
implementation 'com.amap.api:location:latest.integration'
之后到高德申请key值,登录打开控制台 点击创建应用,如图:
填写相应信息,
名称,PackageName:项目的包名,至于SHA1安全码可以这样获取,可以 Window+R 打开控制台 输入cmd点击确定
之后在弹框中完成以下操作就可以看到SHA1安全码了
上图的密钥库口令默认的是:android (注:输入口令是看不见的,输入完成Enter即可)
以上是测试版获取SHA1,发布版SHA1获取请看博客 Android Studio apk打包,keystore.jks文件生成,根据keystore密钥获取SHA1安全码
输入完信息确定就可以看到key值了
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>
<application>标签中添加Key值信息
<service android:name="com.amap.api.location.APSService"></service>
<meta-data android:name="com.amap.api.v2.apikey" android:value="2ca77496c8ae6b92cef9e15dfd68b87b">
</meta-data>
Activity代码:(和以前的相比少了很多不必要的代码)
/***
* 定位
*/
private void showLocation() {
try {
mlocationClient = new AMapLocationClient(this);
mLocationOption = new AMapLocationClientOption();
mlocationClient.setLocationListener(this);
//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
mLocationOption.setInterval(5000);
//设置定位参数
mlocationClient.setLocationOption(mLocationOption);
//启动定位
mlocationClient.startLocation();
} catch (Exception e) { }
} @Override
public void onLocationChanged(AMapLocation amapLocation) {
try {
if (amapLocation != null) {
if (amapLocation.getErrorCode() == 0) {
//定位成功回调信息,设置相关消息 //获取当前定位结果来源,如网络定位结果,详见定位类型表
Log.i("定位类型", amapLocation.getLocationType() + "");
Log.i("获取纬度", amapLocation.getLatitude() + "");
Log.i("获取经度", amapLocation.getLongitude() + "");
Log.i("获取精度信息", amapLocation.getAccuracy() + ""); //如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
Log.i("地址", amapLocation.getAddress());
Log.i("国家信息", amapLocation.getCountry());
Log.i("省信息", amapLocation.getProvince());
Log.i("城市信息", amapLocation.getCity());
Log.i("城区信息", amapLocation.getDistrict());
Log.i("街道信息", amapLocation.getStreet());
Log.i("街道门牌号信息", amapLocation.getStreetNum());
Log.i("城市编码", amapLocation.getCityCode());
Log.i("地区编码", amapLocation.getAdCode());
Log.i("获取当前定位点的AOI信息", amapLocation.getAoiName());
Log.i("获取当前室内定位的建筑物Id", amapLocation.getBuildingId());
Log.i("获取当前室内定位的楼层", amapLocation.getFloor());
Log.i("获取GPS的当前状态", amapLocation.getGpsAccuracyStatus() + ""); //获取定位时间
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(amapLocation.getTime()); Log.i("获取定位时间", df.format(date)); // 停止定位
mlocationClient.stopLocation();
} else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e("AmapError", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
}
}
} catch (Exception e) {
}
} @Override
protected void onStop() {
super.onStop();
// 停止定位
if (null != mlocationClient) {
mlocationClient.stopLocation();
}
} /**
* 销毁定位
*/
private void destroyLocation() {
if (null != mlocationClient) {
/**
* 如果AMapLocationClient是在当前Activity实例化的,
* 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy
*/
mlocationClient.onDestroy();
mlocationClient = null;
}
} @Override
protected void onDestroy() {
destroyLocation();
super.onDestroy();
}
运行得到日志:
代码地址Github :https://github.com/DickyQie/android-map
android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)的更多相关文章
- Android Studio 中实现高德定位并获取相应信息
Android开发项目时常常会遇到定位这个功能,所以写了这篇博客,今天主要讲的高德地图的定位并获取相应信息. 首先导入高德的jar包 选中jar包右键点击 Add As Library, 在buil ...
- [置顶]
xamarin android使用gps定位获取经纬度
看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...
- Android设备唯一码的获取
Android设备唯一码的获取 UTDID是集团无线设备统一ID方案,目的是给每一台设备一个ID,作为唯一标识.UTDID由客户端生成,并在设备中各个客户端之间共享.UTDID的生成中包含时间戳和随机 ...
- android基站定位程序获取地理位置
目录 一.设置界面 二.为按钮绑定事件 三.获取基站信息 四.获取经纬度 五.获取物理位置 六.显示结果 七.运行程序 八.总结 九.程序代码 正文 在Android操作系统下,基站定位其实很简单,先 ...
- Android 集成GoogleMap,实现定位和获取位置信息
1.准备 我使用的是AS2.2.2,首先FQ注册google开发者帐号,准备获取API Key,网上有许多相关资料我就不再赘述,这里讲一个比较小白级的获取方法,可以减少许多输入 1.1. AS创建项目 ...
- Android定位开发之百度定位、高德定位、腾讯定位,三足鼎立一起为我所用!
这几天的项目不是非常紧.于是想为未来可能要做的项目做一些技术储备. 下一个项目非常有可能是定位开发,须要用到手机定位功能,于是查了查如今比較流行的第三方定位,最火的基本上就是百度定位>高德定位& ...
- js调用高德地图API获取地理信息进行定位
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.3&key=(需要自 ...
- Android开发 PopupWindow弹窗调用第三方地图(百度,高德)实现导航功能
博客描述:后台返回地点的经纬度在地图上进行描点,点击导航弹出PopupWindow进行选择地图操作,如果手机中没有安装地图,提示没有,否则传值调起地图进行导航操作 看一下实现的效果,没图说再多都白搭 ...
- 彻底解决Android GPS没法定位这一顽固问题
大家去网上搜索Android定位location为null没法定位问题.预计有一大堆文章介绍怎样来解决.可是最后大家发现基本没用. 本文将从Android定位实现原理来深入分析没法定位原因并提出真正的 ...
随机推荐
- 【HICP Gauss】数据库 环境的搭建 -1
1.安装规则 1.主机名必须网络唯一 2.主机名必须两位数以上 可以中划线 不能下划线 3.固定IP地址 4.端口号 1888 新增账户 omm 用户组 dbgrp ,家目录 /home/ ...
- sqlite3入门之sqlite3_mprintf
sqlite3_mprintf sqlite3_mprintf()函数原型: char *sqlite3_mprintf(const char*,...); sqlite3_mprintf()的作用是 ...
- windows 10 下部署WCF 一些细节
总体上在IIS中部署一个WCF服务和Win7没有什么区别 但是,如果你使用的是.NET 4.5开发的 WCF服务,而windows10 又安装了.net 4.7 那么你需要注意下面问题
- Samba服务安装
安装Samba服务 1.在可以联网的机器上使用yum工具安装,如果未联网,则挂载系统光盘进行安装. # yum install samba samba-client samba-swat 有依赖关 ...
- nodejs查看本机hosts文件域名对应ip
const dns = require('dns') dns.lookup('domainName', function(err, result) { console.log(result) }) r ...
- LightOJ - 1410 - Consistent Verdicts(规律)
链接: https://vjudge.net/problem/LightOJ-1410 题意: In a 2D plane N persons are standing and each of the ...
- react 面试指南
------------恢复内容开始------------ 什么是声明式编程 声明式编程是一种编程范式,它关注的是你要做什么,而不是如何做.它表达逻辑而不显式地定义步骤.这意味着我们需要根据逻辑的计 ...
- [学习笔记]约数&欧拉函数
约数 一.概念 约数,又称因数.整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a.a称为b的倍数,b称为a的约数. 二.性质 1.整数唯一分解 1)定义 对 ...
- __property 关键字的使用
https://blog.csdn.net/lixingshi/article/details/41277577 __property是属性关键字,用来定义类的某种属性. 给类定义属性,是BCB的扩展 ...
- python 之 字符串的常用方法
split()函数: 返回以指定的字符将字符串分割成多个元素的列表 my_str = 'name is wangxiaoming' print(my_str.split()) #默认不写参数表示按空格 ...