当前位置:   article > 正文

AndroidStudio使用高德地图API获取手机定位_android 高德定位

android 高德定位

一、高德地图API申请

首先去高德注册开发者账号

下面这两个选项,也是我们项目成功的关键

1.1怎么获取SHA1指纹密码

①使用AS自带的签名文件

你的用户文件下面会有一个.android文件夹,进入文件夹,在这个路径下打开cmd

如果.android下面没有签名文件参考创建文章

输入: keytool -v -list -keystore debug.keystore(debug.keystore是你签名文件的名称)

1.2获取Packagename 报名

二、编写代码

2.1导入Jar包

下载高德地图API     Android地图SDK下载

下载完成后

复制jar到项目的libs下面,右键Add As Library

2.2配置AndroidManifest.xml

第一处:<application>标签里面
  1. <meta-data
  2. android:name="com.amap.api.v2.apikey"
  3. android:value="你的key">
  4. </meta-data>
  5. <service android:name="com.amap.api.location.APSService" />

第二处:<manifest>标签里面
  1. <!--允许应用读取设备的外部存储-->
  2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  3. <!--用于访问网络,网络定位需要上网-->
  4. <uses-permission android:name="android.permission.INTERNET" />
  5. <!--用于进行网络定位-->
  6. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  7. <!--允许应用程序控制设备的振动功能-->
  8. <uses-permission android:name="android.permission.VIBRATE" />
  9. <!--用于访问GPS定位-->
  10. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  11. <!--获取运营商信息,用于支持提供运营商信息相关的接口-->
  12. <uses-permission android:name="android.permission.ACCESS_NETWORK_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. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  19. <!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
  20. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  21. <!--用于申请调用A-GPS模块-->
  22. <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
  23. <!--用于申请获取蓝牙信息进行室内定位-->
  24. <uses-permission android:name="android.permission.BLUETOOTH" />
  25. <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

位置演示:

三、编写Activity代码(附带自动获取权限)

xml代码

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. android:orientation="vertical"
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:app="http://schemas.android.com/apk/res-auto"
  6. xmlns:tools="http://schemas.android.com/tools"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent"
  9. tools:context=".GDActivity">
  10. <Button
  11. android:layout_width="match_parent"
  12. android:text="高德定位"
  13. android:layout_height="wrap_content"
  14. android:id="@+id/btn_01"/>
  15. <TextView
  16. android:id="@+id/tv_site"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:textColor="@color/black"
  20. android:layout_marginTop="10dp"
  21. android:textSize="15sp"/>
  22. </LinearLayout>

Java代码

  1. package com.example.civilclass;
  2. import android.Manifest;
  3. import android.content.pm.PackageManager;
  4. import android.os.Bundle;
  5. import android.util.Log;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.TextView;
  9. import androidx.annotation.NonNull;
  10. import androidx.appcompat.app.AppCompatActivity;
  11. import androidx.core.app.ActivityCompat;
  12. import androidx.core.content.ContextCompat;
  13. import com.amap.api.location.AMapLocation;
  14. import com.amap.api.location.AMapLocationClient;
  15. import com.amap.api.location.AMapLocationClientOption;
  16. import com.amap.api.location.AMapLocationListener;
  17. public class GDActivity extends AppCompatActivity implements View.OnClickListener {
  18. //声明AMapLocationClient类对象
  19. public AMapLocationClient mLocationClient = null;
  20. //声明定位回调监听器
  21. public AMapLocationListener mLocationListener = new MyAMapLocationListener();
  22. //声明AMapLocationClientOption对象
  23. public AMapLocationClientOption mLocationOption = null;
  24. private Button btn_01;
  25. private TextView tv_site;
  26. private static final int PERMISSION_REQUEST_LOCATION = 1;
  27. @Override
  28. protected void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.activity_gdactivity);
  31. initView();
  32. // 检查定位权限
  33. if(ContextCompat.checkSelfPermission(this,Manifest.permission.ACCESS_FINE_LOCATION)
  34. != PackageManager.PERMISSION_GRANTED) {
  35. // 请求权限
  36. ActivityCompat.requestPermissions(this,
  37. new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
  38. PERMISSION_REQUEST_LOCATION);
  39. } else {
  40. // 权限已被授予,可以直接使用定位服务
  41. useLocationServices();
  42. }
  43. }
  44. @Override
  45. public void onRequestPermissionsResult(int requestCode, @NonNull @org.jetbrains.annotations.NotNull String[] permissions, @NonNull @org.jetbrains.annotations.NotNull int[] grantResults) {
  46. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  47. if (requestCode == PERMISSION_REQUEST_LOCATION) {
  48. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  49. // 权限被授予,可以使用定位服务
  50. useLocationServices();
  51. } else {
  52. // 权限被拒绝,显示提示信息
  53. showPermissionDeniedMessage();
  54. }
  55. }
  56. }
  57. private void useLocationServices() {
  58. // 使用定位服务的代码
  59. // init();
  60. }
  61. private void showPermissionDeniedMessage() {
  62. // 提示用户权限被拒绝的信息
  63. }
  64. private void init() {
  65. //初始化定位
  66. try {
  67. AMapLocationClient.updatePrivacyShow(this, true, true);
  68. AMapLocationClient.updatePrivacyAgree(this, true);
  69. mLocationClient = new AMapLocationClient(getApplicationContext());
  70. } catch (Exception e) {
  71. e.printStackTrace();
  72. }
  73. //设置定位回调监听
  74. mLocationClient.setLocationListener(mLocationListener);
  75. //初始化AMapLocationClientOption对象
  76. mLocationOption = new AMapLocationClientOption();
  77. //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
  78. mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
  79. //获取一次定位结果:
  80. //该方法默认为false。
  81. mLocationOption.setOnceLocation(false);
  82. //获取最近3s内精度最高的一次定位结果:
  83. //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
  84. mLocationOption.setOnceLocationLatest(true);
  85. //设置是否返回地址信息(默认返回地址信息)
  86. mLocationOption.setNeedAddress(true);
  87. //设置是否允许模拟位置,默认为false,不允许模拟位置
  88. mLocationOption.setMockEnable(false);
  89. //关闭缓存机制
  90. mLocationOption.setLocationCacheEnable(false);
  91. //给定位客户端对象设置定位参数
  92. mLocationClient.setLocationOption(mLocationOption);
  93. //启动定位
  94. mLocationClient.startLocation();
  95. }
  96. private void initView() {
  97. btn_01 = (Button) findViewById(R.id.btn_01);
  98. tv_site = (TextView) findViewById(R.id.tv_site);
  99. btn_01.setOnClickListener(this);
  100. }
  101. @Override
  102. public void onClick(View v) {
  103. switch (v.getId()) {
  104. case R.id.btn_01:
  105. init();
  106. break;
  107. }
  108. }
  109. private class MyAMapLocationListener implements AMapLocationListener {
  110. @Override
  111. public void onLocationChanged(AMapLocation aMapLocation) {
  112. if (aMapLocation != null) {
  113. if (aMapLocation.getErrorCode() == 0) {
  114. Log.e("位置:", aMapLocation.getAddress());
  115. tv_site.setText(aMapLocation.getAddress());
  116. } else {
  117. //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
  118. Log.e("AmapError", "location Error, ErrCode:"
  119. + aMapLocation.getErrorCode() + ", errInfo:"
  120. + aMapLocation.getErrorInfo());
  121. }
  122. }
  123. }
  124. }
  125. }
本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读