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


    一、高德地图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

    第一处:标签里面
    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" />

    第二处:标签里面
    1. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    2. <uses-permission android:name="android.permission.INTERNET" />
    3. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    4. <uses-permission android:name="android.permission.VIBRATE" />
    5. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    7. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    8. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    9. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    10. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    11. <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    12. <uses-permission android:name="android.permission.BLUETOOTH" />
    13. <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

    位置演示:

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

    xml代码

    1. "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. }
  • 相关阅读:
    文件夹比较工具
    【React源码】(十二)Hook源码分析 状态与副作用
    Spring面试百题集
    Educational Codeforces Round 133 (Rated for Div. 2)
    C++下基于遗传算法解决TSP问题
    计算机网络(四)传输层
    计算机网络-计算机网路体系结构(概念,组成,功能,分类,标准化工作及相关组织,性能指标(速率,带宽,吞吐量,时延,时延带宽积,往返时间RTT,利用率))
    leetcode 10. 正则表达式匹配
    【AI视野·今日Sound 声学论文速览 第八期】Wed, 20 Sep 2023
    uniapp 表格组件,冻结首行首列
  • 原文地址:https://blog.csdn.net/qq_58156721/article/details/139377382