Android实现高德地图显示及定位
程序员文章站
2022-10-13 10:06:08
本文实例为大家分享了android实现高德地图显示及定位的具体代码,供大家参考,具体内容如下
先看看效果
1、要实现高德地图的定位,首先要下载高德地图的sdk&nb...
本文实例为大家分享了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; } }
一个简单的高德地图就出炉了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。