高德定位地图的集成

上一篇给大家卸了高德基本地图的集成过程,接下来给大家总结一下高德定位地图的集成过程,都差不多,就是代码比较多了。先看一下效果。

(声明一下,这里我写的还是3D版的地图)


首先,先下载定位板的SDK:




这里有两个下载,推荐下载第一个,也比较全面




这里的导入jia包,



在提醒一下,这里的集成,是在基本地图的基础上集成的,所以,生成key值,导入jar包,创建文件等一些基本步骤,大家可以看我的前一篇博客,

链接:http://blog.csdn.net/PenTablet/article/details/78273706

接下来,就要各种配置了,在清单文件中,先配置权限:

[html]  view plain  copy
  1. <uses-permission android:name="android.permission.INTERNET" />  
  2.     <!--允许程序设置内置sd卡的写权限-->  
  3.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  4.     <!--允许程序获取网络状态-->  
  5.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  6.     <!--允许程序访问WiFi网络信息-->  
  7.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  8.     <!--允许程序读写手机状态和身份-->  
  9.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  10.     <!--用于进行网络定位-->  
  11.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>  
  12.     <!--用于访问GPS定位-->  
  13.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>  
  14.     <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->  
  15.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>  
  16.     <!--用于读取手机当前的状态-->  
  17.     <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>  
  18.     <!--用于申请调用A-GPS模块-->  
  19.     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>  
  20.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  21.     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />  
  22.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  23.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  24.     <!--用于访问GPS定位-->  
  25.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  26.     <!--获取运营商信息,用于支持提供运营商信息相关的接口-->  
  27.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  28.     <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->  
  29.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  30.     <!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->  
  31.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  32.     <!--用于访问网络,网络定位需要上网-->  
  33.     <uses-permission android:name="android.permission.INTERNET" />  
  34.     <!--用于读取手机当前的状态-->  
  35.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  36.     <!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->  
  37.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  


配置service:输入自己的key值:

  
  
[html] view plain copy
  1. <application  
  2.         android:allowBackup="true"  
  3.         android:icon="@mipmap/ic_launcher"  
  4.         android:label="@string/app_name"  
  5.         android:supportsRtl="true"  
  6.         android:theme="@style/AppTheme">  
  7.         <service android:name="com.amap.api.location.APSService"></service>  
  8.         <meta-data android:name="com.amap.api.v2.apikey"  
  9.             android:value="5435cdd86876113ed665265bf5e6691d"/>  
  10.         <activity android:name=".MainActivity">  
  11.             <intent-filter>  
  12.                 <action android:name="android.intent.action.MAIN" />  
  13.   
  14.                 <category android:name="android.intent.category.LAUNCHER" />  
  15.             </intent-filter>  
  16.         </activity>  
  17.     </application>  

,接下来在MainActivity中:
  
  
[html] view plain copy
  1. package com.bwie.test.mylocationmap;  
  2.   
  3.   
  4. import android.os.Bundle;  
  5. import android.support.v7.app.AppCompatActivity;  
  6. import android.util.Log;  
  7. import android.widget.Toast;  
  8.   
  9. import com.amap.api.location.AMapLocation;  
  10. import com.amap.api.location.AMapLocationClient;  
  11. import com.amap.api.location.AMapLocationClientOption;  
  12. import com.amap.api.location.AMapLocationListener;  
  13. import com.amap.api.maps.AMap;  
  14. import com.amap.api.maps.CameraUpdateFactory;  
  15. import com.amap.api.maps.LocationSource;  
  16. import com.amap.api.maps.MapView;  
  17. import com.amap.api.maps.UiSettings;  
  18. import com.amap.api.maps.model.LatLng;  
  19.   
  20. import java.text.SimpleDateFormat;  
  21. import java.util.Date;  
  22.   
  23. public class MainActivity extends AppCompatActivity implements LocationSource, AMapLocationListener {  
  24.     private MapView mMapView = null;  
  25.     AMapLocationClient mLocationClient;  
  26.     AMapLocationClientOption mLocationOption;  
  27.     OnLocationChangedListener mListener;  
  28.     boolean isFirstLoc = true;  
  29.     AMap aMap;  
  30.   
  31.   
  32.     @Override  
  33.     protected void onCreate(Bundle savedInstanceState) {  
  34.         super.onCreate(savedInstanceState);  
  35.         setContentView(R.layout.activity_main);  
  36.         //获取地图控件引用  
  37.         mMapView = (MapView) findViewById(R.id.map_view);  
  38.         //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理  
  39.         mMapView.onCreate(savedInstanceState);  
  40.         if (aMap == null) {  
  41.             aMap = mMapView.getMap();  
  42.             //设置显示定位按钮 并且可以点击  
  43.             UiSettings settings = aMap.getUiSettings();  
  44.             aMap.setLocationSource(this);//设置了定位的监听,这里要实现LocationSource接口  
  45.             // 是否显示定位按钮  
  46.             settings.setMyLocationButtonEnabled(true);  
  47.             aMap.setMyLocationEnabled(true);//显示定位层并且可以触发定位,默认是flase  
  48.             mLocationClient = new AMapLocationClient(getApplicationContext());  
  49.             //设置定位回调监听,这里要实现AMapLocationListener接口,AMapLocationListener接口只有onLocationChanged方法可以实现,用于接收异步返回的定位结果,参数是AMapLocation类型。  
  50.             mLocationClient.setLocationListener(this);  
  51.             //初始化定位参数  
  52.             mLocationOption = new AMapLocationClientOption();  
  53.             mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);  
  54.             //设置是否返回地址信息(默认返回地址信息)  
  55.             mLocationOption.setNeedAddress(true);  
  56.             //设置是否只定位一次,默认为false  
  57.             mLocationOption.setOnceLocation(false);  
  58.             //设置是否强制刷新WIFI,默认为强制刷新  
  59.             mLocationOption.setWifiActiveScan(true);  
  60.             //设置是否允许模拟位置,默认为false,不允许模拟位置  
  61.             mLocationOption.setMockEnable(false);  
  62.             //设置定位间隔,单位毫秒,默认为2000ms  
  63.             mLocationOption.setInterval(2000);  
  64.             //给定位客户端对象设置定位参数  
  65.             mLocationClient.setLocationOption(mLocationOption);  
  66.             //启动定位  
  67.             mLocationClient.startLocation();  
  68.         }  
  69.     }  
  70.   
  71.     @Override  
  72.     protected void onDestroy() {  
  73.         super.onDestroy();  
  74.         //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
  75.         mMapView.onDestroy();  
  76.     }  
  77.   
  78.     @Override  
  79.     protected void onResume() {  
  80.         super.onResume();  
  81.         //在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理  
  82.         mMapView.onResume();  
  83.     }  
  84.   
  85.     @Override  
  86.     protected void onPause() {  
  87.         super.onPause();  
  88.         //在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理  
  89.         mMapView.onPause();  
  90.     }  
  91.   
  92.     @Override  
  93.     protected void onSaveInstanceState(Bundle outState) {  
  94.         super.onSaveInstanceState(outState);  
  95.         //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState)现地图生命周期管理  
  96.         mMapView.onSaveInstanceState(outState);  
  97.     }  
  98.   
  99.     @Override  
  100.     public void onLocationChanged(AMapLocation aMapLocation) {  
  101.         if (aMapLocation != null) {  
  102.             if (aMapLocation.getErrorCode() == 0) {  
  103.                 //定位成功回调信息,设置相关消息  
  104.                 aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见官方定位类型表  
  105.                 aMapLocation.getLatitude();//获取纬度  
  106.                 aMapLocation.getLongitude();//获取经度  
  107.                 aMapLocation.getAccuracy();//获取精度信息  
  108.                 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  109.                 Date date = new Date(aMapLocation.getTime());  
  110.                 df.format(date);//定位时间  
  111.                 aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。  
  112.                 aMapLocation.getCountry();//国家信息  
  113.                 aMapLocation.getProvince();//省信息  
  114.                 aMapLocation.getCity();//城市信息  
  115.                 aMapLocation.getDistrict();//城区信息  
  116.                 aMapLocation.getStreet();//街道信息  
  117.                 aMapLocation.getStreetNum();//街道门牌号信息  
  118.                 aMapLocation.getCityCode();//城市编码  
  119.                 aMapLocation.getAdCode();//地区编码  
  120.   
  121.                 // 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置  
  122.                 if (isFirstLoc) {  
  123.                     //设置缩放级别  
  124.                     aMap.moveCamera(CameraUpdateFactory.zoomTo(17));  
  125.                     //将地图移动到定位点  
  126.                     aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(aMapLocation.getLatitude(), aMapLocation.getLongitude())));  
  127.                     //点击定位按钮 能够将地图的中心移动到定位点  
  128.                     mListener.onLocationChanged(aMapLocation);  
  129.                     //获取定位信息  
  130.                     StringBuffer buffer = new StringBuffer();  
  131.                     buffer.append(aMapLocation.getCountry() + ""  
  132.                             + aMapLocation.getProvince() + ""  
  133.                             + aMapLocation.getCity() + ""  
  134.                             + aMapLocation.getProvince() + ""  
  135.                             + aMapLocation.getDistrict() + ""  
  136.                             + aMapLocation.getStreet() + ""  
  137.                             + aMapLocation.getStreetNum());  
  138.                     Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();  
  139.                     isFirstLoc = false;  
  140.                 }  
  141.             } else {  
  142.                 //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。  
  143.                 Log.e("AmapError", "location Error, ErrCode:"  
  144.                         + aMapLocation.getErrorCode() + ", errInfo:"  
  145.                         + aMapLocation.getErrorInfo());  
  146.                 Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG).show();  
  147.             }  
  148.         }  
  149.     }  
  150.   
  151.     @Override  
  152.     public void activate(OnLocationChangedListener onLocationChangedListener) {  
  153.         mListener = onLocationChangedListener;  
  154.     }  
  155.   
  156.     @Override  
  157.     public void deactivate() {  
  158.         mListener = null;  
  159.     }  
  160. }  

在布局文件中:
  
  
[html] view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:id="@+id/activity_main"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     tools:context="com.bwie.test.mylocationmap.MainActivity">  
  8.   
  9.     <com.amap.api.maps.MapView  
  10.         android:id="@+id/map_view"  
  11.         android:layout_width="match_parent"  
  12.         android:layout_height="match_parent" >  
  13.     </com.amap.api.maps.MapView>  
  14. </RelativeLayout>  

到这基本上就完成了,大家测试的时候,推荐还是使用真机测试,使用虚拟机有可能会出现一些意外的问题。
最后展示一下我的项目目录:






  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值