高德地图的快速接入

1.导入SDK

链接:https://pan.baidu.com/s/1vdoPXmsZ4CuVfV_J144zuw 密码:fvv2

里面有定位 地图  获取屏幕中心经纬度 距离测量

用的是EventBus传值

2.添加权限

 
  1. <!-- 用于访问网络,网络定位需要上网 -->

  2. <uses-permission android:name="android.permission.INTERNET" />

  3. <!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据 -->

  4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

  5. <!-- 用于进行网络定位 -->

  6. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  7. <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->

  8. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

  9. <!-- 用于访问GPS定位 -->

  10. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

  11. <!-- 用于读取手机当前的状态 -->

  12. <uses-permission android:name="android.permission.READ_PHONE_STATE" />

  13. <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->

  14. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

  15. <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->

  16. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

  17. <!-- 这个权限用于允许程序在手机屏幕关闭后后台进程仍然运行 -->

  18. <user-permission android:name="android.permission.WAKE_LOCK" />

3.加入你的application里面

 
  1. <meta-data

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

  3. android:value="你的key" />

  4.  
  5. <service android:name="com.amap.api.location.APSService" />

4.到EventBus包

implementation 'de.greenrobot:eventbus:3.0.0-beta1'

5.主函数

 
  1. public class MapActivity extends BaseActivity implements

  2. GeocodeSearch.OnGeocodeSearchListener,

  3. AMap.OnCameraChangeListener,

  4. DistanceSearch.OnDistanceSearchListener, LocationSource {

  5.  
  6.  
  7. private MapView mapView;

  8. private AMap aMap;

  9. private boolean tag=false;

  10. private GeocodeSearch geocodeSearch;

  11. private OnLocationChangedListener mListener;

  12. private boolean isFirstLoc=false;

  13.  
  14. private double latitu2,longitu2;

  15. public double latitu1=0.0;

  16. public double longitu1=0.0;

  17. private DistanceSearch distanceSearch;

  18. private DistanceSearch.DistanceQuery distanceQuery;

  19.  
  20. //声明AMapLocationClient类对象

  21. public AMapLocationClient mLocationClient = null;

  22.  
  23.  
  24.  
  25. /**

  26. * 声明定位回调监听器

  27. */

  28. public AMapLocationListener mLocationListener = new AMapLocationListener() {

  29. @Override

  30. public void onLocationChanged(AMapLocation amapLocation) {

  31. if (amapLocation != null) {

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

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

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

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

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

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

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

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

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

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

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

  43. amapLocation.getProvince();//省信息

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

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

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

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

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

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

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

  51. lat = amapLocation.getLatitude();

  52. lon = amapLocation.getLongitude();

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

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

  55.  
  56. // 设置当前地图显示为当前位置

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

  58. MarkerOptions markerOptions = new MarkerOptions();

  59. aMap.addMarker(markerOptions);

  60.  
  61. // 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置

  62. if (isFirstLoc==true) {

  63. //设置缩放级别

  64. aMap.moveCamera(CameraUpdateFactory.zoomTo(17));

  65. //将地图移动到定位点

  66. aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())));

  67. //点击定位按钮 能够将地图的中心移动到定位点

  68. mListener.onLocationChanged(amapLocation);

  69. isFirstLoc = false;

  70. }

  71.  
  72. } else {

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

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

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

  76. + amapLocation.getErrorInfo());

  77. }

  78. }

  79. }

  80. };

  81.  
  82. //声明mLocationOption对象

  83. public AMapLocationClientOption mLocationOption = null;

  84. private double lat;

  85. private double lon;

  86.  
  87. @Override

  88. protected void onCreate(Bundle savedInstanceState) {

  89. super.onCreate(savedInstanceState);

  90. setContentView(R.layout.map_activity);

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

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

  93.  
  94. //初始化定位

  95. mLocationClient = new AMapLocationClient(getApplicationContext());

  96. //设置定位回调监听

  97. mLocationClient.setLocationListener(mLocationListener);

  98.  
  99. init();

  100. aMap.setOnCameraChangeListener(this);

  101.  
  102.  
  103.  
  104.  
  105. }

  106.  
  107.  
  108. /**

  109. * * 初始化AMap对象

  110. */

  111. private void init() {

  112. if (aMap == null) {

  113. aMap = mapView.getMap();

  114. }

  115. //构造一个默认的位置

  116. LatLng latLng = new LatLng(latitu1,longitu1);

  117. aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,11));

  118. // 是否显示定位按钮

  119. aMap.getUiSettings().setMyLocationButtonEnabled(true);

  120. aMap.setMyLocationType(AMap.LOCATION_TYPE_MAP_ROTATE);

  121. //设置定位监听

  122. aMap.setLocationSource(this);

  123. // 是否可触发定位并显示定位层

  124. aMap.setMyLocationEnabled(true);

  125.  
  126. MyLocationStyle myLocationStyle = new MyLocationStyle();

  127. myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher));// 自定义定位蓝点图标*/

  128. myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0));// 自定义精度范围的圆形边框颜色

  129. myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0));//圆圈的颜色,设为透明的时候就可以去掉园区区域了

  130. aMap.setMyLocationStyle(myLocationStyle);

  131.  
  132. //地理搜索类

  133. geocodeSearch = new GeocodeSearch(this);

  134. geocodeSearch.setOnGeocodeSearchListener(this);

  135. setUpMap();

  136.  
  137. }

  138.  
  139. private void setUpMap() {

  140. //初始化定位参数

  141. mLocationOption = new AMapLocationClientOption();

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

  143. mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);

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

  145. mLocationOption.setNeedAddress(true);

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

  147. mLocationOption.setOnceLocation(true);

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

  149. mLocationOption.setWifiActiveScan(true);

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

  151. mLocationOption.setMockEnable(false);

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

  153. mLocationOption.setInterval(2000);

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

  155. mLocationClient.setLocationOption(mLocationOption);

  156. //启动定位

  157. mLocationClient.startLocation();

  158. }

  159.  
  160.  
  161. /**

  162. * 方法必须重写

  163. */

  164. @Override

  165. protected void onResume() {

  166. super.onResume();

  167. mapView.onResume();

  168. }

  169.  
  170. /**

  171. * 方法必须重写

  172. */

  173. @Override

  174. protected void onPause() {

  175. super.onPause();

  176. mapView.onPause();

  177. }

  178.  
  179. @Override

  180. protected void onStop() {

  181. super.onStop();

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

  183. //关闭后台定位,参数为true时会移除通知栏,为false时不会移除通知栏,但是可以手动移除

  184. if(android.os.Build.VERSION.SDK_INT >= 26){

  185. mLocationClient.disableBackgroundLocation(true);

  186. }

  187.  
  188. }

  189.  
  190. /**

  191. * 方法必须重写

  192. */

  193. @Override

  194. protected void onSaveInstanceState(Bundle outState) {

  195. super.onSaveInstanceState(outState);

  196. mapView.onSaveInstanceState(outState);

  197. }

  198.  
  199. /**

  200. * 方法必须重写

  201. */

  202. @Override

  203. protected void onDestroy() {

  204. super.onDestroy();

  205. mapView.onDestroy();

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

  207. }

  208. public void affirm(View view){

  209. tag=true;

  210. //逆地理编码

  211. getAddressByLatlng(new LatLng(latitu1,longitu1));

  212. getAddressByLatlng(new LatLng(latitu2,longitu2));

  213. chelian();

  214. Intent i=new Intent();

  215. setResult(0,i);

  216. finish();

  217. }

  218.  
  219. @Override

  220. public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {

  221. RegeocodeAddress regeocodeAddress = regeocodeResult.getRegeocodeAddress();

  222. ArrayList<String> arr = new ArrayList<>();

  223. if (tag == true) {

  224. arr.add(regeocodeAddress.getProvince());

  225. arr.add(regeocodeAddress.getCity());

  226. arr.add(regeocodeAddress.getDistrict());

  227. arr.add(regeocodeAddress.getTownship());

  228. arr.add(regeocodeAddress.getFormatAddress());

  229. arr.add(regeocodeAddress.getNeighborhood());

  230. EventBus.getDefault().post(arr);

  231. }

  232.  
  233. Log.d("aaaaa", "onRegeocodeSearched: " + regeocodeAddress.getDistrict());

  234. }

  235. //////////////////////////////////////////////////

  236. @Override

  237. public void onCameraChange(CameraPosition cameraPosition) {

  238. LatLng target = cameraPosition.target;

  239. if(latitu1==0.0){

  240. latitu1=target.latitude;

  241. longitu1=target.longitude;

  242. }

  243. latitu2=target.latitude;

  244. longitu2=target.longitude;

  245. Log.d("aaaaa", "onCameraChange111: "+target.latitude+"-----"+target.longitude);

  246.  
  247. }

  248.  
  249. @Override

  250. public void onCameraChangeFinish(CameraPosition cameraPosition) {

  251.  
  252. }

  253.  
  254. @Override

  255. public void onGeocodeSearched(GeocodeResult result, int rCode) {

  256.  
  257. }

  258. private void getAddressByLatlng(LatLng latLng) {

  259. //逆地理编码查询条件:逆地理编码查询的地理坐标点、查询范围、坐标类型。

  260. LatLonPoint latLonPoint = new LatLonPoint(latLng.latitude, latLng.longitude);

  261. RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 500, GeocodeSearch.GPS);

  262. //异步查询

  263. geocodeSearch.getFromLocationAsyn(query);

  264. }

  265. public void chelian(){

  266. distanceSearch = new DistanceSearch(this);

  267. distanceSearch.setDistanceSearchListener(this);

  268. distanceQuery = new DistanceSearch.DistanceQuery();

  269. LatLonPoint start = new LatLonPoint(latitu1, longitu1);

  270. LatLonPoint dest = new LatLonPoint(latitu2, longitu2);

  271.  
  272. //设置起点和终点,其中起点支持多个

  273. List<LatLonPoint> latLonPoints = new ArrayList<LatLonPoint>();

  274. latLonPoints.add(start);

  275. distanceQuery.setOrigins(latLonPoints);

  276. distanceQuery.setDestination(dest);

  277. //设置测量方式,支持直线和驾车

  278. distanceQuery.setType(DistanceSearch.TYPE_DRIVING_DISTANCE);

  279. //请求经纬度的距离

  280. distanceSearch.calculateRouteDistanceAsyn(distanceQuery);

  281. }

  282. //得到距离 返回结果成功或者失败的响应码。1000为成功,其他为失败

  283. @Override

  284. public void onDistanceSearched(DistanceResult result, int i) {

  285. if(i==1000){

  286. List<DistanceItem> distanceResults = result.getDistanceResults();

  287. for (int j = 0; j <distanceResults.size() ; j++) {

  288. Log.d("aaaaa", "onDistanceSearched: "+distanceResults.get(j).getDistance()+"米");

  289. }

  290.  
  291. }

  292. }

  293.  
  294.  
  295. @Override

  296. public void activate(OnLocationChangedListener onLocationChangedListener) {

  297. mListener = onLocationChangedListener;

  298. isFirstLoc=true;

  299. }

  300.  
  301. @Override

  302. public void deactivate() {

  303. mListener = null;

  304. }

  305. }

  306.  

7.主布局

 
  1. <RelativeLayout

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

  3. xmlns:app="http://schemas.android.com/apk/res-auto"

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

  5. android:layout_width="match_parent"

  6. android:layout_height="match_parent"

  7. tools:context=".pub.MapActivity">

  8. <com.amap.api.maps.MapView

  9. android:id="@+id/map"

  10. android:layout_width="match_parent"

  11. android:layout_height="match_parent"/>

  12. <ImageView

  13. android:layout_width="wrap_content"

  14. android:layout_height="wrap_content"

  15. android:src="@mipmap/coordicon"

  16. android:layout_centerInParent="true"/>

  17. <Button

  18. android:layout_centerHorizontal="true"

  19. android:layout_alignParentBottom="true"

  20. android:layout_width="180dp"

  21. android:layout_height="wrap_content"

  22. android:text="@string/pub_but"

  23. android:textColor="@color/white"

  24. android:background="@drawable/usercenter_register_button"

  25. android:onClick="affirm"

  26. android:layout_marginBottom="7dp"

  27. />

  28. </RelativeLayout>


 

8.副布局

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

  2. xmlns:app="http://schemas.android.com/apk/res-auto"

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

  4. android:layout_width="match_parent"

  5. android:layout_height="match_parent"

  6. tools:context="yizhong.com.xtzhangbinbin.jpq.app.Main2Activity">

  7. <Button

  8. android:layout_width="wrap_content"

  9. android:layout_height="wrap_content"

  10. android:text="bb"

  11. android:onClick="bb"/>

  12. </LinearLayout>


 

9.如果你写到这里运行没有实现定位成功的话   一定要注意你的包名

这里的包名只能是下面图的包名

下面我在送大家一个查询SHA1的方法直接在你的项目中运行得到返回值就行了

 
  1. //获取SHA1安全码

  2. public static String sHA1(Context context) {

  3. try {

  4. PackageInfo info = context.getPackageManager().getPackageInfo(

  5. context.getPackageName(), PackageManager.GET_SIGNATURES);

  6. byte[] cert = info.signatures[0].toByteArray();

  7. MessageDigest md = MessageDigest.getInstance("SHA1");

  8. byte[] publicKey = md.digest(cert);

  9. StringBuffer hexString = new StringBuffer();

  10. for (int i = 0; i < publicKey.length; i++) {

  11. String appendString = Integer.toHexString(0xFF & publicKey[i])

  12. .toUpperCase(Locale.US);

  13. if (appendString.length() == 1)

  14. hexString.append("0");

  15. hexString.append(appendString);

  16. hexString.append(":");

  17. }

  18. String result = hexString.toString();

  19. return result.substring(0, result.length()-1);

  20. } catch (PackageManager.NameNotFoundException e) {

  21. e.printStackTrace();

  22. } catch (NoSuchAlgorithmException e) {

  23. e.printStackTrace();

  24. }

  25. return null;

  26. }

直接在main函数中运行这个方法将返回值打印一下   复制到高德官网上就行了

猜你喜欢

转载自blog.csdn.net/jie1175623465/article/details/81381014
今日推荐