一、基础地图部分

1.获取APPKey

在高德地图注册开发者账号,然后创建应用,使用SHA1和PackageName得到Key

image.png

创建应用 输入你的应用名称 选择你的应用类型 点击确定

image.png

点击确定之后得到这么一个东西点击添加新key 输入完毕后再下方点击提交 获取SHA1值以及应用包名见下方

image.png

获取SHA1值方法:

首先使用cmd 打开dos窗口

image.png

输入cd .android 切换到 .android目录

image.png

使用keytool工具获取签名的SHA1值 输入命令:keytool -list -v -keystore debug.keystore 秘钥口令输入 android 或者直接回车

image.png

这里的指纹整数有MD5、SHA1、SHA256 这样就拿到了上面需要的SHA1值

image.png

获取应用包名:

打开你的gradle文件

image.png

这就是你的应用包名

image.png

提交之后得到的AppKey:

image.png

2.下载SDK

image.png

image.png

3.导入项目

把下载下来的压缩包解压,里面的jar包放到项目的libs目录下

image.png

然后Add As Library

image.png

集成高德地图需要用到.so文件 解压得到的.so文件 目录里面就是所需的.so文件

在main目录下创建jniLibs目录 注意是main目录 将解压得到的.so文件连带目录都copy到jniLibs目录下

image.png

4.配置清单文件

在AndroidManifest.xml里面添加你的AppKey

android:name="com.amap.api.v2.apikey"

android:value="99ac75ad4aa47d9b865cee7c3ef31a89"/>

在AndroidManifest.xml中添加用户权限

//地图包、搜索包需要的基础权限

//定位包、导航包需要的额外权限(注:基础权限也需要)

配置Service

5.布局文件:

在布局文件中添加地图控件

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="demo.gaode.com.gaodemapdemo.ShowMapActivity">

xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/map"

android:layout_width="match_parent"

android:layout_height="match_parent" />

6.正式开始写代码了

1.基础地图显示

效果图

image.png

初始化地图控件 管理地图控件生命周期

package demo.gaode.com.gaodemapblog;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import com.amap.api.maps.MapView;

public class ShowMapActivity extends AppCompatActivity {

private MapView mapView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_show_map);

//初始化地图控件

mapView = (MapView) findViewById(R.id.map);

//必须要写

mapView.onCreate(savedInstanceState);

}

/**

* 方法必须重写

*/

@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();

}

}

2.定位功能实现

效果图以及Log

image.png

image.png

效果图和基础地图的效果图没什么区别,因为我既没有设置中心点也没有设置marker,但是我获取到了位置,那么定位完毕后添加一个中心点,一个marker就可以完成基础地图+定位+marker的效果了

先把定位的所有代码贴出来

package demo.gaode.com.gaodemapblog;

import android.app.Activity;

import android.os.Bundle;

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.maps.AMap;

import com.amap.api.maps.MapView;

import java.text.SimpleDateFormat;

import java.util.Date;

public class ShowMapActivity extends Activity {

private MapView mapView;

private AMap aMap;

//声明AMapLocationClient类对象

public AMapLocationClient mLocationClient = null;

//声明定位回调监听器

public AMapLocationListener mLocationListener = new AMapLocationListener() {

@Override

public void onLocationChanged(AMapLocation amapLocation) {

if (amapLocation != null) {

if (amapLocation.getErrorCode() == 0) {

//定位成功回调信息,设置相关消息

amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表

amapLocation.getLatitude();//获取纬度

amapLocation.getLongitude();//获取经度

amapLocation.getAccuracy();//获取精度信息

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date = new Date(amapLocation.getTime());

df.format(date);//定位时间

amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。

amapLocation.getCountry();//国家信息

amapLocation.getProvince();//省信息

amapLocation.getCity();//城市信息

amapLocation.getDistrict();//城区信息

amapLocation.getStreet();//街道信息

amapLocation.getStreetNum();//街道门牌号信息

amapLocation.getCityCode();//城市编码

amapLocation.getAdCode();//地区编码

amapLocation.getAoiName();//获取当前定位点的AOI信息

lat = amapLocation.getLatitude();

lon = amapLocation.getLongitude();

Log.v("pcw","lat : "+lat+" lon : "+lon);

} else {

//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。

Log.e("AmapError", "location Error, ErrCode:"

+ amapLocation.getErrorCode() + ", errInfo:"

+ amapLocation.getErrorInfo());

}

}

}

};

//声明mLocationOption对象

public AMapLocationClientOption mLocationOption = null;

private double lat;

private double lon;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_show_map);

mapView = (MapView) findViewById(R.id.map);

mapView.onCreate(savedInstanceState);//必须要写

//初始化定位

mLocationClient = new AMapLocationClient(getApplicationContext());

//设置定位回调监听

mLocationClient.setLocationListener(mLocationListener);

init();

}

/**

* * 初始化AMap对象

*/

private void init() {

if (aMap == null) {

aMap = mapView.getMap();

}

setUpMap();

}

private void setUpMap() {

//初始化定位参数

mLocationOption = new AMapLocationClientOption();

//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式

mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

//设置是否返回地址信息(默认返回地址信息)

mLocationOption.setNeedAddress(true);

//设置是否只定位一次,默认为false

mLocationOption.setOnceLocation(false);

//设置是否强制刷新WIFI,默认为强制刷新

mLocationOption.setWifiActiveScan(true);

//设置是否允许模拟位置,默认为false,不允许模拟位置

mLocationOption.setMockEnable(false);

//设置定位间隔,单位毫秒,默认为2000ms

mLocationOption.setInterval(2000);

//给定位客户端对象设置定位参数

mLocationClient.setLocationOption(mLocationOption);

//启动定位

mLocationClient.startLocation();

}

/**

* 方法必须重写

*/

@Override

protected void onResume() {

super.onResume();

mapView.onResume();

}

/**

* 方法必须重写

*/

@Override

protected void onPause() {

super.onPause();

mapView.onPause();

}

@Override

protected void onStop() {

super.onStop();

mLocationClient.stopLocation();//停止定位

}

/**

* 方法必须重写

*/

@Override

protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

mapView.onSaveInstanceState(outState);

}

/**

* 方法必须重写

*/

@Override

protected void onDestroy() {

super.onDestroy();

mapView.onDestroy();

mLocationClient.onDestroy();//销毁定位客户端。

}

}

这里面有一个地方千万要记住,一定要在AndroidManifest.xml中注册广播 否则定位会失败

下面来讲讲这段代码里面几个组成:

初始化定位

//初始化定位

mLocationClient = new AMapLocationClient(getApplicationContext());

//设置定位回调监听

mLocationClient.setLocationListener(mLocationListener);

初始化AMap对象

/**

* * 初始化AMap对象

*/

private void init() {

if (aMap == null) {

aMap = mapView.getMap();

}

setUpMap();

}

配置定位参数并开始定位

/**

* 配置定位参数

*/

private void setUpMap() {

//初始化定位参数

mLocationOption = new AMapLocationClientOption();

//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式

mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

//设置是否返回地址信息(默认返回地址信息)

mLocationOption.setNeedAddress(true);

//设置是否只定位一次,默认为false

mLocationOption.setOnceLocation(false);

//设置是否强制刷新WIFI,默认为强制刷新

mLocationOption.setWifiActiveScan(true);

//设置是否允许模拟位置,默认为false,不允许模拟位置

mLocationOption.setMockEnable(false);

//设置定位间隔,单位毫秒,默认为2000ms

mLocationOption.setInterval(2000);

//给定位客户端对象设置定位参数

mLocationClient.setLocationOption(mLocationOption);

//启动定位

mLocationClient.startLocation();

}

在onStop里面停止定位

@Override

protected void onStop() {

super.onStop();

mLocationClient.stopLocation();//停止定位

}

在onDestory方法里面销毁定位

/**

* 方法必须重写

*/

@Override

protected void onDestroy() {

super.onDestroy();

mapView.onDestroy();

mLocationClient.onDestroy();//销毁定位客户端。

}

设置定位监听,在监听中可以获取定位的一系列数据

/**

* 声明定位回调监听器

*/

public AMapLocationListener mLocationListener = new AMapLocationListener() {

@Override

public void onLocationChanged(AMapLocation amapLocation) {

if (amapLocation != null) {

if (amapLocation.getErrorCode() == 0) {

//定位成功回调信息,设置相关消息

amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表

amapLocation.getLatitude();//获取纬度

amapLocation.getLongitude();//获取经度

amapLocation.getAccuracy();//获取精度信息

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date = new Date(amapLocation.getTime());

df.format(date);//定位时间

amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。

amapLocation.getCountry();//国家信息

amapLocation.getProvince();//省信息

amapLocation.getCity();//城市信息

amapLocation.getDistrict();//城区信息

amapLocation.getStreet();//街道信息

amapLocation.getStreetNum();//街道门牌号信息

amapLocation.getCityCode();//城市编码

amapLocation.getAdCode();//地区编码

amapLocation.getAoiName();//获取当前定位点的AOI信息

lat = amapLocation.getLatitude();

lon = amapLocation.getLongitude();

Log.v("pcw","lat : "+lat+" lon : "+lon);

} else {

//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。

Log.e("AmapError", "location Error, ErrCode:"

+ amapLocation.getErrorCode() + ", errInfo:"

+ amapLocation.getErrorInfo());

}

}

}

};

3.设置中心点以及marker

效果图

image.png

有了效果图 那么我把基础地图+定位+marker的代码贴出来

package demo.gaode.com.gaodemapblog;

import android.app.Activity;

import android.graphics.BitmapFactory;

import android.os.Bundle;

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.maps.AMap;

import com.amap.api.maps.CameraUpdateFactory;

import com.amap.api.maps.MapView;

import com.amap.api.maps.model.BitmapDescriptor;

import com.amap.api.maps.model.BitmapDescriptorFactory;

import com.amap.api.maps.model.LatLng;

import com.amap.api.maps.model.MarkerOptions;

import java.text.SimpleDateFormat;

import java.util.Date;

public class ShowMapActivity extends Activity {

private MapView mapView;

private AMap aMap;

//声明AMapLocationClient类对象

public AMapLocationClient mLocationClient = null;

/**

* 声明定位回调监听器

*/

public AMapLocationListener mLocationListener = new AMapLocationListener() {

@Override

public void onLocationChanged(AMapLocation amapLocation) {

if (amapLocation != null) {

if (amapLocation.getErrorCode() == 0) {

//定位成功回调信息,设置相关消息

amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表

amapLocation.getLatitude();//获取纬度

amapLocation.getLongitude();//获取经度

amapLocation.getAccuracy();//获取精度信息

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

Date date = new Date(amapLocation.getTime());

df.format(date);//定位时间

amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。

amapLocation.getCountry();//国家信息

amapLocation.getProvince();//省信息

amapLocation.getCity();//城市信息

amapLocation.getDistrict();//城区信息

amapLocation.getStreet();//街道信息

amapLocation.getStreetNum();//街道门牌号信息

amapLocation.getCityCode();//城市编码

amapLocation.getAdCode();//地区编码

amapLocation.getAoiName();//获取当前定位点的AOI信息

lat = amapLocation.getLatitude();

lon = amapLocation.getLongitude();

Log.v("pcw", "lat : " + lat + " lon : " + lon);

Log.v("pcw", "Country : " + amapLocation.getCountry() + " province : " + amapLocation.getProvince() + " City : " + amapLocation.getCity() + " District : " + amapLocation.getDistrict());

// 设置当前地图显示为当前位置

aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 19));

MarkerOptions markerOptions = new MarkerOptions();

markerOptions.position(new LatLng(lat, lon));

markerOptions.title("当前位置");

markerOptions.visible(true);

BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker));

markerOptions.icon(bitmapDescriptor);

aMap.addMarker(markerOptions);

} else {

//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。

Log.e("AmapError", "location Error, ErrCode:"

+ amapLocation.getErrorCode() + ", errInfo:"

+ amapLocation.getErrorInfo());

}

}

}

};

//声明mLocationOption对象

public AMapLocationClientOption mLocationOption = null;

private double lat;

private double lon;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_show_map);

mapView = (MapView) findViewById(R.id.map);

mapView.onCreate(savedInstanceState);//必须要写

//初始化定位

mLocationClient = new AMapLocationClient(getApplicationContext());

//设置定位回调监听

mLocationClient.setLocationListener(mLocationListener);

init();

}

/**

* * 初始化AMap对象

*/

private void init() {

if (aMap == null) {

aMap = mapView.getMap();

}

setUpMap();

}

/**

* 配置定位参数

*/

private void setUpMap() {

//初始化定位参数

mLocationOption = new AMapLocationClientOption();

//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式

mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

//设置是否返回地址信息(默认返回地址信息)

mLocationOption.setNeedAddress(true);

//设置是否只定位一次,默认为false

mLocationOption.setOnceLocation(false);

//设置是否强制刷新WIFI,默认为强制刷新

mLocationOption.setWifiActiveScan(true);

//设置是否允许模拟位置,默认为false,不允许模拟位置

mLocationOption.setMockEnable(false);

//设置定位间隔,单位毫秒,默认为2000ms

mLocationOption.setInterval(2000);

//给定位客户端对象设置定位参数

mLocationClient.setLocationOption(mLocationOption);

//启动定位

mLocationClient.startLocation();

}

/**

* 方法必须重写

*/

@Override

protected void onResume() {

super.onResume();

mapView.onResume();

}

/**

* 方法必须重写

*/

@Override

protected void onPause() {

super.onPause();

mapView.onPause();

}

@Override

protected void onStop() {

super.onStop();

mLocationClient.stopLocation();//停止定位

}

/**

* 方法必须重写

*/

@Override

protected void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

mapView.onSaveInstanceState(outState);

}

/**

* 方法必须重写

*/

@Override

protected void onDestroy() {

super.onDestroy();

mapView.onDestroy();

mLocationClient.onDestroy();//销毁定位客户端。

}

}

代码实际上没什么难度,也不多,下面我把设置marker的代码贴出来

// 设置当前地图显示为当前位置

aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 19));

MarkerOptions markerOptions = new MarkerOptions();

markerOptions.position(new LatLng(lat, lon));

markerOptions.title("当前位置");

markerOptions.visible(true);

BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker));

markerOptions.icon(bitmapDescriptor);

aMap.addMarker(markerOptions);

好了,到这里 基础地图+定位+marker就做出来了

android 添加定位点,Android 高德基础地图定位、设置Marker、可视中心点实现步骤...相关推荐

  1. 手把手教你实现百度基础地图+定位功能+设置中心点+添加Marker

    配置环境 1.获取AppKey 1.创建应用地址:http://lbsyun.baidu.com/apiconsole/key 2.创建应用: 3.获取SHA1值,首先cmd打开dos窗口 4.cd ...

  2. web使用高德完成地图定位_如何在您的Web设计服务中定位-以及何时应该使用

    web使用高德完成地图定位 To niche or not to niche? 要利基还是不利基? Let me get straight to it and say that you don't h ...

  3. 高德地图sdk设置marker并且将设置为地图中心

    高德地图sdk设置marker并且将设置为地图中心,直接在官方demo里改,授权key需要改为自己的. <!doctype html> <html> <head>& ...

  4. Android添加item动画,RecyclerView基础篇-Item添加动画

    Android_Banner.jpg 简介 本节中我们介绍下给RecyclerView中的Item添加动画. 添加的动画,分为,在打开列表时有Item的展示动画,当滑动的时候没有动画 和打开列表滑动时 ...

  5. android 添加splash,$Android启动界面(Splash)的两种实现方法

    (一)用2个Activity实现 用Handler对象的postDelayed方法来实现延迟跳转的目的. 补充:Handler的常用方法: // 立即执行Runnable对象 public final ...

  6. xpwifi热点设置android,教你在XP电脑中开启设置WiFi热点使用的步骤

    对于系统中网络的连接问题是最重要的,那在处理不同的错误的情况中,对于无线网络的设置也就是我们说的WiFi的使用也是会遇到问题的,那在操作的时候对于电脑中是怎么实现设置WiFi热点的的,对于这个问题今天 ...

  7. Android真机测试使用百度地图定位到非洲附近的的问题

    我用的是自个8.0的手机,我碰到的是动态权限问题,AndroidManifest里面权限都加了,输出日志得到的经纬度如 下代码 //经纬度对象5/11 LatLng ll = new LatLng(b ...

  8. Android 使用 Retrofit 保存 高德 静态地图API 获取的地图图片

    1.导入包 api 'com.squareup.retrofit2:retrofit:2.3.0' // 必要retrofit依赖 api 'com.squareup.retrofit2:adapte ...

  9. android添加imageview,android – 以编程方式将ImageView添加到Layout

    我想创建从屏幕上方向下的图像. 到今天为止我有这个: ImageView mario = (ImageView) findViewById(R.id.mario); TranslateAnimatio ...

最新文章

  1. 美国星巴克肯德基明年将支持Apple Pay
  2. 安卓开发 底部导航图标切换时动画效果_安卓10系统终于来了,流畅度堪比苹果?...
  3. 字符设备驱动程序之poll机制
  4. Github使用初体验2018.08.07
  5. Python 学习第十六天 html 前端内容总结
  6. 实战例子_Pytorch官方力荐新书《Pytorch深度学习实战指南》pdf及代码分享
  7. C# ADO.NET
  8. 分布式事务一致性方案
  9. Django之forms组件使用
  10. 三星s9 android p内测,三星国行Galaxy S9/S9+用户安卓9.0内测:更新One UI
  11. 人事考勤系统服务器端,考勤管理,考勤管理系统,人事考勤管理系统,考勤系统 - 新开普(NewCapec)...
  12. python读取grd数据_python批处理系列代码-GRD转TIF
  13. 【Pygame实战】第三版本最终确认——《愤怒的小鸟梦幻爆破》上线回归,爆赞~
  14. 中国剩余定理(孙子定理)
  15. 函数逼近和曲线拟合、插值
  16. 模块*.ocx已加载,但对DllRegisterServer的调用失败,错误代码0x8002801c问题解决
  17. 为VMware vSphere创建Ubuntu 16.04 Terraform模板
  18. 技术时代的人心识别:从可能向现实的跨越丨上海交通大学教授博士生导师李侠...
  19. 几种软件开发方法对比
  20. Python与企业微信-2

热门文章

  1. 华为AP瘦模式转胖模式
  2. 医院HIS系统短信发送模板
  3. 沙师弟学Python多任务之线程
  4. 商品详情页整体架构介绍
  5. D3.js地图打点射线动效(结合snap.js)
  6. 7月App Store中国免费榜(教育)TOP100发布,驾考宝典再次金榜题名
  7. 安装算量软件移动项操作方法
  8. 2019年1月23号训练日记
  9. vue tree组件_基于 Vue2.0 和 HeyUI 组件库的中后端系统 HeyUI Admin
  10. 【杂记】新上手的罗技鼠标和键盘