如果地图功能随处可见,应用很广,这里利用高德地图的SDK来实现地图的显示以及定位功能。如需要详细了解参考官网信息http://lbs.amap.com/api/android-sdk/summary

使用高德地图你还得需要一个key。注册一个高德地图账号,在开发者平台 进入右上角的控制台,在应用管理中新建一个应用就可以获取到key了。

首先官网下载SDK包http://lbs.amap.com/api/android-sdk/download,如果你下载的是2D地图则只有一个jar包,拷贝放入项目的libs文件夹里面,右键选择add as library即可。如果是3D包的话,则里面除了一个jar还有相关的so文件,你不仅要导入jar还得导入相关so文件。在main文件夹下建一个jnilibs文件夹,把所有的so文件放进去即可。如图

然后注册文件中加个meta-data,里面的name是固定的,但是value是你获取的key。加相关权限,权限有点多,管它有没有用,都加上。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.gdmap"><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><!--value处加上自己申请的key--><meta-dataandroid:name="com.amap.api.v2.apikey"android:value="1bfdd3600775f90d9953ca0351836006"/><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

布局文件中写一个地图视图

<com.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"/>
然后是主活动,只要你将调用了mapview.oncreate方法,地图就能显示出来,其他的都是定位相关的操作,代码中都有说明。
package com.example.gdmap;import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
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.LocationSource;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;public class MainActivity extends AppCompatActivity implements LocationSource,AMapLocationListener{MapView mapView=null;//地图视图AMap aMap;//地图对象OnLocationChangedListener mlistener;//定位监听AMapLocationClient client;//定位者AMapLocationClientOption option;//定位参数@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mapView= (MapView) findViewById(R.id.map);mapView.onCreate(savedInstanceState);//创建地图init();}public void init(){aMap=mapView.getMap();//获取地图对象UiSettings settings=aMap.getUiSettings();//获取定位按钮aMap.setLocationSource(this);//设置定位监听settings.setMyLocationButtonEnabled(true);//显示定位按钮aMap.setMyLocationEnabled(true);//显示定位层并可触发定位}//activate初始化定位@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mlistener=onLocationChangedListener;client=new AMapLocationClient(this);client.setLocationListener(this);//定位回调监听option=new AMapLocationClientOption();option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//高进度定位client.setLocationOption(option);//加载定位参数client.startLocation();//开始定位}//deactivate停止定位@Overridepublic void deactivate() {mlistener = null;if (client != null) {client.stopLocation();client.onDestroy();}client = null;}//定位成功后回调函数@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if(mlistener!=null){if(aMapLocation!=null&&aMapLocation.getErrorCode()==0){Log.e("经度: ", String.valueOf(aMapLocation.getLatitude()));Log.e("纬度: ", String.valueOf(aMapLocation.getLongitude()));Log.e("地址:",aMapLocation.getAddress());mlistener.onLocationChanged(aMapLocation);}else Log.e("定位结果","定位失败");}}@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();if(client!=null) client.onDestroy();}
}
这样定位有点bug,首先它默认隔两秒就定位一次,一直在定位,有时候我们只需要定位一次或让它在指定的时候就开始定位。查阅相关文档后发现两个AmaplocaionClientoption中的方法,设置时间间隔setInterval,设置只定位一次setOnceLocation。
还有就是只有第一次定位成功,其他时候都定位失败,错误码为10,这个错误码是启动服务失败。因为没手动加服务。加上定位服务即可。
<service android:name="com.amap.api.location.APSService"></service>

最后来一张效果图

高德地图开发(一)显示地图与定位相关推荐

  1. AndroidStudio百度地图开发之显示地图

    最近打算研究一些百度地图相关的东西,由于官方网站给的都是基于Eclipse开发的例子,所以在研究过程中遇到不少的坑,在这里记录一下,对 后来初用AndroidStudio 开发百度地图的兄弟们也算有个 ...

  2. 超详细的Android百度地图开发:在APP上定位并显示出来

    超详细的Android百度地图开发:在APP上定位并显示出来 一 写在前面 二 注册百度开发者账户.申请API KEY 三.代码实现 四.问题 五.总结 一 写在前面 由于项目所需,我需要在手机APP ...

  3. 高德地图开发手册 php,地图控件-参考手册-地图 JS API | 高德地图API

    在线插件是在基础地图服务上增加的额外功能,您可以根据自己的需要选择添加.插件分为两类:一类是地图控件,它们是用户与地图交互的UI元素,例如缩放控制条(ToolBar)等:一类是功能型插件,用来完成某些 ...

  4. 任我行二 - 高德地图篇1 - 显示地图

    2019独角兽企业重金招聘Python工程师标准>>> 附加高德SDK  apidoc 按照官方文档,将下载下来的doc 附加到IDEA 中. 记:2d的包可以不使用,3d 的包包含 ...

  5. 高德离线地图开发 java_使用离线地图-创建地图-开发指南-Android 地图SDK | 高德地图API...

    高德3D 地图 SDK支持离线地图功能.(2D 地图 SDK 不支持离线地图功能) 离线地图可满足在无网络环境下查看地图信息的需求,在设备本地有离线地图数据的情况下,SDK 会优先加载离线地图. 离线 ...

  6. 高德离线数据api_使用离线地图-创建地图-开发指南-iOS 地图SDK | 高德地图API

    高德3D 地图 SDK支持离线地图功能.(2D 地图 SDK 不支持离线地图功能) 离线地图可满足在无网络环境下查看地图信息的需求,在设备本地有离线地图数据的情况下,SDK 会优先加载离线地图. 离线 ...

  7. 高德离线地图开发 java_自定义地图-创建地图-开发指南-Android 地图SDK | 高德地图API...

    简介 自 Android 3D 地图 SDK v5.2.0起,高德地图支持使用可视化自定义地图模版改变底图颜色和样式,实现可视化的编辑和控制显示地图元素. 创建样式文件 创建地图样式 高德地图开放平台 ...

  8. 离线地图开发--BigeMap(离线地图服务器构建,支持百度、谷歌、高德等地图)

    前言: 目前高德地图以及百度谷歌等地图对Web端离线功能支持不太友好(甚至没有离线地图功能),这致使我们在进行内网服务器使用的地图开发时非常的不便利,因此在进行离线地图开发时我们通常选择引入第三方地图 ...

  9. Android百度地图开发之显示当前位置地图

    步骤: 1.获取当前的经纬度 2.显示地图 3.改变地图中心的经纬度 1.获取当前的经纬度 请参考网址: http://blog.csdn.net/zhengyikuangge/article/det ...

最新文章

  1. tar 和gzip 的区别
  2. .net 连接ORACLE 数据库的例子
  3. 编程语言python入门要电脑什么配置能带动-对于几乎是零基础的人,直接学 Python 编程合适吗?...
  4. Ubuntu和Windows默认系统启动顺序修改
  5. shutil模块,为什么说它是os模块的兄弟模块?
  6. T4 Template Overview
  7. UliPad 初体验----python 开发利器
  8. 【Codeforces - 769D】k-Interesting Pairs Of Integers(暴力,统计,思维,数学,异或)
  9. Web开发之三:前后端开发任务量分析与比较
  10. 95-138-010-源码-Function-ProcessFunction
  11. 稀疏光流python_【原创】OpenCV-Python系列之稀疏光流(五十九)
  12. 操作系统形成性考核册作业答案
  13. 挑战Tiktok,跨境卖家的新红利流量渠道?
  14. 图片加载------reactVirtualized
  15. 手机屏幕驱动板1080x1920分辨率HDMI红米note3 note4 note4x屏幕Fondar自制投影 光固化
  16. find 命令多条件匹配
  17. 「How The Economic Machine Works」《经济机器是如何运转的》中文字幕
  18. 【数据库CS751】数据库的建表与插入
  19. SHELL DATE 命令详解
  20. 大型电商平台设计实例:电商平台总体设计和业务模型设计

热门文章

  1. 毕业设计 python的微信公众平台机器人
  2. 小哥凭“量子速读”绝技吸粉59万:看街景图0.1秒,“啪的一下”在世界地图精准找到!...
  3. Excel如何快速提取单元格括号内数据
  4. jquery事件绑定的问题Uncaught TypeError: $(...).live is not a function at HTMLDocument.<anonymous> (ex5_
  5. OKR是上下同欲的载体
  6. 好佳居软装十大品牌 掌握新中式软装风格
  7. 文本关键词的提取算法实验[又是转的]
  8. RPG Maker MV 图块冲突解决、素材管理
  9. Nginx 动静分离 -02
  10. 6iypl8php,无线超方便 YPL TL-1/TL-3蓝牙音箱新品上市