android 高德地图 lbstraceclient,安卓高德地图定位篇-(1)
安卓高德地图定位。先看效果图:
STEP1:
先去高德开放平台注册账号,这个不用多说吧
网址:https://lbs.amap.com/
之后再去控制台-应用管理找到自己的key,如下图所示
STEP2:
回到AS 这里也可以去下载架包导入 我直接引入的
网址:https://lbs.amap.com/api/android-sdk/download
在module-build.gradle里引入即可,在点击右上角Sync Now即可
dependencies {
compile fileTree(include: [‘*.jar’], dir: ‘libs’)
//定位
compile ‘com.amap.api:location:latest.integration’
//地图
compile ‘com.amap.api:3dmap:latest.integration’
}
STEP3:布局文件 activity_map_location
STEP4:权限类
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
public class LocationUtils {
/**
* 初始化定位
*/
//初始化client
AMapLocationClient locationClient = new AMapLocationClient(context.getApplicationContext());
//设置定位参数
locationClient.setLocationOption(locationOption);
// 设置定位监听
locationClient.setLocationListener(locationListener);
return locationClient;
}
/**
* 定位参数
*/
public static AMapLocationClientOption getDefaultOption() {
AMapLocationClientOption mOption = new AMapLocationClientOption();
//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式
mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//可选,设置是否gps优先,只在高精度模式下有效。默认关闭
mOption.setGpsFirst(false);
//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效
mOption.setHttpTimeOut(25000);
//可选,设置定位间隔。默认为2秒
mOption.setInterval(2000);
//可选,设置是否返回逆地理地址信息。默认是true
mOption.setNeedAddress(true);
//可选,设置是否单次定位。默认是false
mOption.setOnceLocation(false);
//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用
mOption.setOnceLocationLatest(false);
//可选, 设置网络请求的协议。可选HTTP或者HTTPS。默认为HTTP
AMapLocationClientOption.setLocationProtocol(AMapLocationClientOption.AMapLocationProtocol.HTTP);
//可选,设置是否使用传感器。默认是false
mOption.setSensorEnable(false);
//可选,设置是否开启wifi扫描。默认为true,如果设置为false会同时停止主动刷新,停止以后完全依赖于系统刷新,定位位置可能存在误差
mOption.setWifiScan(true);
//可选,设置是否使用缓存定位,默认为true
mOption.setLocationCacheEnable(true);
return mOption;
}
}P:6 MainActivity 返回信息:
https://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;`这里写代码片`
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.maps.AMap;
import com.amap.api.maps.MapView;
import com.amap.api.maps.model.MyLocationStyle;
import com.helloworld.gather.R;
import com.helloworld.gather.util.LocationUtils;
import com.helloworld.gather.util.Tools;
import com.helloworld.gather.widget.PermissionsUtils;
`public class MapLocationActivity extends AppCompatActivity implements View.OnClickListener, AMapLocationListener {
private static final int PERMISSON_REQUESTCODE = 0;
private TextView tv_location;
private MapView mMapView;
private AMap aMap;
//判断权限是否打开
private boolean isNeedCheck = true;
private MyLocationStyle myLocationStyle;
private static final String TAG = "MapLocationActivity";
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
//声明AMapLocationClientOption对象
public AMapLocationClientOption mLocationOption = null;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_location);
findViewById(R.id.ic_back).setOnClickListener(this);
mMapView = (MapView) this.findViewById(R.id.map);
tv_location = (TextView) this.findViewById(R.id.tv_location);
// 此方法须重写,虚拟机需要在很多情况下保存地图绘制的当前状态
mMapView.onCreate(savedInstanceState);
initLocation();
}
private void initLocation() {
if (aMap == null) {
aMap = mMapView.getMap();
}
//指南针
aMap.getUiSettings().setCompassEnabled(true);
//显示默认的定位按钮
aMap.getUiSettings().setMyLocationButtonEnabled(true);
//显示实时交通状况(默认地图)
//aMap.setTrafficEnabled(true);
//地图模式-标准地图:MAP_TYPE_NORMAL、卫星地图:MAP_TYPE_SATELLITE
aMap.setMapType(AMap.MAP_TYPE_NORMAL);
initLocationStyle();
//动态设置权限
if (isNeedCheck) {
if (PermissionsUtils.checkPermissions(this, PERMISSON_REQUESTCODE, PermissionsUtils.locationPermissions)) {
initaion();
}
} else {
initaion();
}
}
private void initaion() {
//基本的定位参数
mLocationOption = LocationUtils.getDefaultOption();
mLocationClient = LocationUtils.initLocation(this, mLocationOption, this);
//启动定位
mLocationClient.startLocation();
}
private void initLocationStyle() {
//实现定位蓝点
//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)
//如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle = new MyLocationStyle();
//设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。
aMap.setMyLocationEnabled(true);
//设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
//单位:毫秒,默认值:1000毫秒,如果传小于1000的任何值将按照1000计算。
//myLocationStyle.interval(2000);
//只定位一次。
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);
//定位一次,且将视角移动到地图中心点。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE);
//连续定位、且将视角移动到地图中心点,定位蓝点跟随设备移动。(1秒1次定位)
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;
//连续定位、且将视角移动到地图中心点,地图依照设备方向旋转,定位点会跟随设备移动。(1秒1次定位)
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);
//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)默认执行此种模式。
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);
//以下三种模式从5.1.0版本开始提供
//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);
//连续定位、蓝点不会移动到地图中心点,并且蓝点会跟随设备移动。
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);
//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。
//myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);
//设置定位蓝点的icon图标方法,需要用到BitmapDescriptor类对象作为参数。
//myLocationStyle.myLocationIcon(R.mipmap.ic_launcher);
//设置是否显示定位小蓝点,用于满足只想使用定位,不想使用定位小蓝点的场景,设置false以后图面上不再有定位蓝点的概念,但是会持续回调位置信息。
//myLocationStyle.showMyLocation(true);
//设置定位蓝点精度圆圈的边框颜色的方法。[会叠加不建议设置]
//myLocationStyle.strokeColor(R.color.colorAccent);
//设置定位蓝点精度圆圈的填充颜色的方法。
//myLocationStyle.radiusFillColor(R.color.colorAccent);
//设置定位蓝点精度圈的边框宽度的方法。
//myLocationStyle.strokeWidth(20f);
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ic_back:
this.finish();
break;
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PERMISSON_REQUESTCODE) {
if (!PermissionsUtils.verifyPermissions(grantResults)) {
//没打开权限 跳转至设置界面
Tools.startAppSettings(this);
isNeedCheck = false;
} else {
initLocation();
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
//销毁地图
if (mMapView != null) {
mMapView.onDestroy();
}
}
@Override
public void onPause() {
super.onPause();
//暂停地图的绘制
if (mMapView != null) {
mMapView.onPause();
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (mMapView != null) {
mMapView.onSaveInstanceState(outState);
}
}
private String cityName, AdCode, cityCode, province, poiName, street, district;
private double latitude, longitude;
@Override
public void onLocationChanged(AMapLocation amapLocation) {
if (amapLocation.getErrorCode() == 0) {
//更多返回看(文档:https://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation)
latitude = amapLocation.getLatitude();//获取纬度
longitude = amapLocation.getLongitude();//获取经度
province = amapLocation.getProvince();//省信息
cityName = amapLocation.getCity();//城市信息
district = amapLocation.getDistrict();//城区信息
street = amapLocation.getStreet();//街道信息
cityCode = amapLocation.getCityCode();//城市编码
AdCode = amapLocation.getAdCode();//地区编码
poiName = amapLocation.getPoiName();//获取当前位置的POI名称
Log.e(TAG, "onLocationChanged: " + cityName);
Log.e(TAG, "onLocationChanged: " + AdCode);
Log.e(TAG, "onLocationChanged: " + cityCode);
Log.e(TAG, "onLocationChanged: " + province);
Log.e(TAG, "onLocationChanged: " + poiName);
Log.e(TAG, "onLocationChanged: " + latitude);
Log.e(TAG, "onLocationChanged: " + street);
Log.e(TAG, "onLocationChanged: " + longitude);
Log.e(TAG, "onLocationChanged: " + district);
Log.e(TAG, "onLocationChanged: " + amapLocation.getAddress());
Log.e(TAG, "onLocationChanged: " + amapLocation.getStreetNum());
Log.e(TAG, "onLocationChanged: " + amapLocation.getLocationType());
Log.e(TAG, "onLocationChanged: " + amapLocation.getLocationDetail());
//显示当前的位置
tv_location.setText(amapLocation.getAddress());
//停止定位后,本地定位服务并不会被销毁
mLocationClient.stopLocation();
//销毁定位客户端,同时销毁本地定位服务。
mLocationClient.onDestroy();
} else {
//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
Log.e(TAG, "定位失败, 错误码:"
+ amapLocation.getErrorCode() + "n"
+ " 错误信息:"
+ amapLocation.getErrorInfo() + "n"
+ "APK SHA1值为:" + Tools.getSHA1(this));
String str = amapLocation.getErrorInfo();
String[] split = str.split(" ");
//截取第一个空格之前的错误日志
Toast.makeText(this,split[0],Toast.LENGTH_SHORT).show();
//停止定位后,本地定位服务并不会被销毁
mLocationClient.stopLocation();
//销毁定位客户端,同时销毁本地定位服务。
mLocationClient.onDestroy();
}
}
}
STEP:7 SHA1码的获取
获取APK当前签名文件的SHA1:
/**
* 获取APK当前签名文件的SHA1
* @param context
* @re public static String getSHA1(Context context) {
try {
PackageInfo info = context.getPackageManager().getPackageInfo(
context.getPackageName(), PackageManager.GET_SIGNATURES);
byte[] cert = info.signatures[0].toByteArray();
MessageDigest md = MessageDigest.getInstance(“SHA1”);
byte[] publicKey = md.digest(cert);
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < publicKey.length; i++) {
String appendString = Integer.toHexString(0xFF & publicKey[i])
.toUpperCase(Locale.US);
if (appendString.length() == 1)
hexString.append(“0”);
hexString.append(appendString);
hexString.append(“:”);
}
String result = hexString.toString();
return result.substring(0, result.length() - 1);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return null;
}*
* 跳转至设置界面方法
*/
public static void startAppSettings(Context context) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.parse("package:" + context.getPackageName()));
context.startActivity(intent);
}
STEP:8 一般到这里就结束了,如果定位失败可以到这个网址链接查看错误码说明:https://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/
最后注意APP SHA1不要填错 否则会定位到 非洲去…
android 高德地图 lbstraceclient,安卓高德地图定位篇-(1)相关推荐
- wince搜狗地图_安卓百度地图winCE版 V10.9.2 安卓版下载 - 加速吧 - win10系统之家
百度地图winCE版是一款非常好用的车载地图导航app.这款百度导航车载wince版基于wince技术开发,为每一位即将出行的用户提供最适合的路线规划,少走烂路.歪路,更快更精准的找到目的地. [功能 ...
- 安卓高德地图实时定位方法的封装
安卓地图的开发对于一个没有地图开发经验的人来说还是有点摸不着头脑的,我刚开始的时候就走了很多弯路,现在将自己实现的方法分享出来,供大家参考: 首先要去到高德地图的开方平台申请key值:点击打开链接 然 ...
- 安卓高德地图-(定位+离线UI组件自定义1)
效果图: 其中第二张图是官网默认的,后面有讲解如何自己定义界面. STEP1: 先去高德开放平台注册账号,网址:http://lbs.amap.com/ 之后再去控制台-应用管理找到自己的key,如下 ...
- android高德地图设置经纬度,安卓高德地图开发自定义线路规划(按着自己定义的经纬度规划线路)...
[实例简介] 自定义地图的线路规划问题,代码可以直接的借用,方便大家学习 [实例截图] [核心代码] (YN)安卓高德地图自定义线路规划(按着指定的经纬度规划线路) └── YnGaoDeThreeM ...
- android高德地图黑色,关于安卓高德地图的手机黑屏花屏模糊等症状处理
安卓高德用户在打开加载地图的webview时候,打开方式为: var newCarrental = plus.webview.getWebviewById("加载webview页面" ...
- 基于高德地图JsAPI进行浏览器精确定位,实现手机端考勤打卡功能
前言: 由于项目需求需要在项目中实现手机端(基于网页)考勤打卡功能,最初考虑使用H5自身定位功能,但尝试过后,效果很不稳定.然后尝试使用百度地图JsAPI,百度家的稳定倒是很稳定,没想到的是定位位置和 ...
- Android - 简单的显示高德SDK中的3D地图
简单的显示高德SDK中的3D地图 身为一个安卓小白,前几天试了一下高德SDK,踩了几个蠢蠢的坑,秉承着别让其他小白也踩到,我就写一篇怎么简单的实现高德SDK显示地图与小蓝点的教程. 获得key 1.先 ...
- 百度高德位置定位服务器,调用百度、高德地图App,百度地图网页版,App定位
1.首先判断是否安装了目标地图App //判断是否安装目标应用 public static boolean isInstallByread(String packageName) { return n ...
- 高德地图开发(一)显示地图与定位
如果地图功能随处可见,应用很广,这里利用高德地图的SDK来实现地图的显示以及定位功能.如需要详细了解参考官网信息http://lbs.amap.com/api/android-sdk/summary ...
最新文章
- DVWA安装——一个菜鸟的入门教程
- 【深度学习】卷积神经网络速成
- linux deepin tar安装jdk8
- 李洪强漫谈iOS开发[C语言-038]-if else if语句
- linux版本fedora,技术|初级:如何更新 Fedora Linux 系统
- 三维点云学习(4)5-DBSCNA python 复现-1- 距离矩阵法
- 极简代码(一) —— class label 的统计计数
- Linux沙箱技术简介
- SQL每日一题(20210901)如果员工的【入职日期】是当月15号后,则该员工的【社保缴纳月份】为【入职日期】的次月
- openGL增强表面细节--凹凸贴图
- PHP快速入门(一)
- RxJS结合vue-rx, Akita的介绍和使用
- 细细品味Ubuntu Scope中的category renderer模版
- 13-二维数组和字符串
- SWIFT国际资金清算系统
- 程序设计之值班排班程序
- 三星首款双摄像头手机竟然不是Note 8而是它
- 10 个超极好用的 VS Code 神级插件,每个程序员必备!
- 为什么软件开发很难?真相了
- Netty系列之Netty编解码框架分析
热门文章
- 拉勾网企业招聘信息分析报告
- spring-mybatis.xml 里mapperLocations 配置多路径
- 2015年基金公司排名排行榜,基金公司排名2015一览
- NAACL 2022事件相关(事件抽取、事件关系抽取、事件预测等)论文汇总
- 维修服务器的请示,关于更换云服务器的请示
- H750移植rt_thread操作系统完整工程分享,包括外部FLASH分散加载文件
- 蓝桥--不同非空子串
- java中实现工厂日历_Java实现的日历功能完整示例
- mysql主从配置duxi_​WordPress大前端主题DUX 5.1
- 示例程序009--阙值化(二值化,cvThreshold)