当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现高德地图显示及定位

Android实现高德地图显示及定位

2019年07月23日  | 移动技术网IT编程  | 我要评论

变频器维修网,2013美丽中国晚会,凤凰舞转菡萏红

本文实例为大家分享了android实现高德地图显示及定位的具体代码,供大家参考,具体内容如下

先看看效果

1、要实现高德地图的定位,首先要下载高德地图的sdk 

下载

然后在高德地图官网上登录你注册的账号并且去控制台—–>应用管理—–>添加新key 
获取到自己的key值 
获取key的具体方法的

2、通过解压得到.jar文件并放到libs文件中,手动添加到依赖库中(右键add—-) 
3、如果你的地图sdk是3d的需要在main中创建 jnilibs 文件夹并把你解压出来的其他文件放到此处 
4、开发环境已经配置好了,接下来就是敲代码了

在工程的“ androidmanifest.xml ”清单文件中添加key和service

<meta-data android:name="com.amap.api.v2.apikey"
android:value="你申请的key" />
<service android:name="com.amap.api.location.apsservice"></service>

添加权限

<!--允许程序打开网络套接字-->
 <uses-permission android:name="android.permission.internet" />
 <!--允许程序设置内置sd卡的写权限-->
 <uses-permission android:name="android.permission.write_external_storage" />
 <!--允许程序获取网络状态-->
 <uses-permission android:name="android.permission.access_network_state" />
 <!--允许程序访问wifi网络信息-->
 <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>
 <!--用于访问gps定位-->
 <uses-permission android:name="android.permission.access_fine_location"></uses-permission>
 <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
 <uses-permission android:name="android.permission.change_wifi_state"></uses-permission>
 <!--用于读取手机当前的状态-->
 <uses-permission android:name="android.permission.read_phone_state"></uses-permission>
 <!--用于申请调用a-gps模块-->
 <uses-permission android:name="android.permission.access_location_extra_commands"/>
 <!--获取运营商信息,用于支持提供运营商信息相关的接口-->
 <uses-permission android:name="android.permission.access_network_state" />
 <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
 <uses-permission android:name="android.permission.access_wifi_state" />
 <!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
 <uses-permission android:name="android.permission.change_wifi_state" />
 <!--用于访问网络,网络定位需要上网-->
 <uses-permission android:name="android.permission.internet" />
 <!--用于读取手机当前的状态-->
 <uses-permission android:name="android.permission.read_phone_state" />
 <!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
 <uses-permission android:name="android.permission.write_external_storage" />

acticity_main.xml布局文件

<com.amap.api.maps.mapview
 android:id="@+id/map"
 android:layout_width="match_parent"
 android:layout_height="match_parent"></com.amap.api.maps.mapview>

mainactivity代码

import android.os.bundle;
import android.support.v7.app.appcompatactivity;
import android.util.log;
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.cameraupdatefactory;
import com.amap.api.maps.locationsource;
import com.amap.api.maps.mapview;
import com.amap.api.maps.uisettings;
import com.amap.api.maps.model.latlng;
 
import java.text.simpledateformat;
import java.util.date;
 
public class mainactivity extends appcompatactivity implements locationsource, amaplocationlistener {
 
 //amap是地图对象
 private amap amap;
 private mapview mapview;
 //声明amaplocationclient类对象,定位发起端
 private amaplocationclient mlocationclient = null;
 //声明mlocationoption对象,定位参数
 public amaplocationclientoption mlocationoption = null;
 //声明mlistener对象,定位监听器
 private onlocationchangedlistener mlistener = null;
 //标识,用于判断是否只显示一次定位信息和用户重新定位
 private boolean isfirstloc = true;
 
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);
 //获取地图控件引用
 mapview = (mapview) findviewbyid(r.id.map);
 //在activity执行oncreate时执行mmapview.oncreate(savedinstancestate),实现地图生命周期管理
 mapview.oncreate(savedinstancestate);
 if (amap == null) {
 amap = mapview.getmap();
 //设置显示定位按钮 并且可以点击
 uisettings settings = amap.getuisettings();
 amap.setlocationsource(this);//设置了定位的监听
 // 是否显示定位按钮
 settings.setmylocationbuttonenabled(true);
 amap.setmylocationenabled(true);//显示定位层并且可以触发定位,默认是flase
 }
 //开始定位
 location();
 }
 
 private void location() {
 //初始化定位
 mlocationclient = new amaplocationclient(getapplicationcontext());
 //设置定位回调监听
 mlocationclient.setlocationlistener(this);
 //初始化定位参数
 mlocationoption = new amaplocationclientoption();
 //设置定位模式为hight_accuracy高精度模式,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 ondestroy() {
 super.ondestroy();
 //在activity执行ondestroy时执行mmapview.ondestroy(),实现地图生命周期管理
 mapview.ondestroy();
 mlocationclient.stoplocation();//停止定位
 mlocationclient.ondestroy();//销毁定位客户端。
 }
 
 @override
 protected void onresume() {
 super.onresume();
 //在activity执行onresume时执行mmapview.onresume (),实现地图生命周期管理
 mapview.onresume();
 }
 
 @override
 protected void onpause() {
 super.onpause();
 //在activity执行onpause时执行mmapview.onpause (),实现地图生命周期管理
 mapview.onpause();
 }
 
 @override
 protected void onsaveinstancestate(bundle outstate) {
 super.onsaveinstancestate(outstate);
 //在activity执行onsaveinstancestate时执行mmapview.onsaveinstancestate (outstate),实现地图生命周期管理
 mapview.onsaveinstancestate(outstate);
 }
 
 @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();//地区编码
 
 // 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置
 if (isfirstloc) {
  //设置缩放级别
  amap.movecamera(cameraupdatefactory.zoomto(17));
  //将地图移动到定位点
  amap.movecamera(cameraupdatefactory.changelatlng(new latlng(amaplocation.getlatitude(), amaplocation.getlongitude())));
  //点击定位按钮 能够将地图的中心移动到定位点
  mlistener.onlocationchanged(amaplocation);
  //添加图钉
  // amap.addmarker(getmarkeroptions(amaplocation));
  //获取定位信息
  stringbuffer buffer = new stringbuffer();
  buffer.append(amaplocation.getcountry() + ""
  + amaplocation.getprovince() + ""
  + amaplocation.getcity() + ""
  + amaplocation.getprovince() + ""
  + amaplocation.getdistrict() + ""
  + amaplocation.getstreet() + ""
  + amaplocation.getstreetnum());
  toast.maketext(getapplicationcontext(), buffer.tostring(), toast.length_long).show();
  isfirstloc = false;
 }
 
 
 } else {
 //显示错误信息errcode是错误码,errinfo是错误信息,详见错误码表。
 log.e("amaperror", "location error, errcode:"
  + amaplocation.geterrorcode() + ", errinfo:"
  + amaplocation.geterrorinfo());
 toast.maketext(getapplicationcontext(), "定位失败", toast.length_long).show();
 }
 }
 }
 
 
 @override
 public void activate(onlocationchangedlistener onlocationchangedlistener) {
 mlistener = onlocationchangedlistener;
 }
 
 @override
 public void deactivate() {
 mlistener = null;
 }
}

一个简单的高德地图就出炉了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网