Android studio接入高德SDK(1)--获取地址信息

1.创建一个Empty Activity 的应用项目 

a.File->New->New Project

 b.选择Phone and Table -> Empty Activity ->NEXT->finish

 2.去高德地图官网获取SDK

官网地址:高德开放平台 | 高德地图API (amap.com)

        进去后呢我们需要干两件事(获取key和将高德地图api导入app)

a.获取key 

1.直接登录平台并进入控制台2.直接看图三步骤

3.我们创建一个应用,名字叫csdn_location,选应用类型选其他(纯属个人命名爱好哈)最后点击添加。

4.到这一步呢,到重点了!!!!!!!!!

这里的SHA1获取方法呢,在C盘的用户文件夹的.android中,里边有个debug.keystore,找到这个文件我们就成功一半了。

 

         接下来就WIN+R输入cmd,进入后勒输入android studio的安装所在的盘

         打开android studio的安装文件的jre文件中的bin文件,看到keytool.exe说明成功找到了

        我们先cd到keytool.exe在的文件,就是上一步找的地址,然后.\keytool -v -list -keystore+debug.keystore的路径

 秘钥的密码默认是android,复制SHA1

包名呢就打开刚刚创建的MainActivity.java上面package

 填完带星的后勒就可以提交了

 然后我们就完成了一件事

 b.获取高德的SDK

官方提供了两种方法,一种是通过拷贝集成SDK,一种是通过Gradle集成SDK

官方网址:

Android Studio 配置工程-创建工程-开发指南-Android 定位SDK|高德地图API (amap.com)

我们这里只采用方法2,方法1后期更新

第一步:

 第二步:

 编译一下没问题

3.配置AndroidManifest.xml

首先声明Service组件,然后,声明权限,最后,设置高德Key,红色框框就是我们上面获得的key了

官方网址:获取定位数据-获取位置-开发指南-Android 定位SDK|高德地图API (amap.com)

4.编写Mainactivity.java

        我们先编写一个朴实无华的.xml文件,加入TextView控件以便后面打印定位信息

  有一个点很容易忘记的是在调用高德的API前一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定一定要加入进行合规检查,设置接口之前保证隐私政策合规,个人先前失败就是没有注意到这一点,排查了两天才在debug的小角落中发现。

 下面直接上代码

package com.example.csdn_location_demo;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Build;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

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 java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity implements AMapLocationListener {

    private static final int MY_PERMISSIONS_REQUEST_CALL_LOCATION = 1;
    public AMapLocationClient mlocationClient;
    public AMapLocationClientOption mLocationOption = null;
    public TextView location;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        location = (TextView) findViewById(R.id.TV_LOACATION);
        AMapLocationClient.updatePrivacyShow(this,true,true);
        AMapLocationClient.updatePrivacyAgree(this,true);
        //检查版本是否大于M
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this,
                        new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                        MY_PERMISSIONS_REQUEST_CALL_LOCATION);
            } else {
                //"权限已申请";
                showLocation();
            }
        }

    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        if (requestCode == MY_PERMISSIONS_REQUEST_CALL_LOCATION) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //"权限已申请"
                showLocation();
            } else {
                Toast.makeText(getBaseContext(),"权限已拒绝,不能定位",Toast.LENGTH_SHORT).show();

            }
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    // TODO:
    private void showLocation() {
        try {
            mlocationClient = new AMapLocationClient(this);
            mLocationOption = new AMapLocationClientOption();
            mlocationClient.setLocationListener(this);
            //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            mLocationOption.setInterval(5000);
            //设置定位参数
            mlocationClient.setLocationOption(mLocationOption);
            //启动定位
            mlocationClient.startLocation();
        } catch (Exception e) {

        }
    }

    @Override
    public void onLocationChanged(AMapLocation amapLocation) {
        try {
            if (amapLocation != null) {
                StringBuffer dz = new StringBuffer();
                if (amapLocation.getErrorCode() == 0) {
                    //定位成功回调信息,设置相关消息
                    Toast.makeText(getBaseContext(),"收到定位",Toast.LENGTH_SHORT).show();
                    //获取当前定位结果来源,如网络定位结果,详见定位类型表
                    dz.append("定位类型:  "+ amapLocation.getLocationType() + "\n");
                    dz.append("获取纬度:  "+ amapLocation.getLatitude() + "\n");
                    dz.append("获取经度:  "+ amapLocation.getLongitude() + "\n");
                    dz.append("获取精度信息:  "+ amapLocation.getAccuracy() + "\n");

                    //如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
                    dz.append("地址:  "+ amapLocation.getAddress() + "\n");
                    dz.append("国家信息:  "+ amapLocation.getCountry() + "\n");
                    dz.append("省信息:  "+ amapLocation.getProvince() + "\n");
                    dz.append("城市信息:  "+ amapLocation.getCity() + "\n");
                    dz.append("城区信息:  "+ amapLocation.getDistrict() + "\n");
                    dz.append("街道信息:  "+ amapLocation.getStreet() + "\n");
                    dz.append("街道门牌号信息:  "+ amapLocation.getStreetNum() + "\n");
                    dz.append("城市编码:  "+ amapLocation.getCityCode() + "\n");
                    dz.append("地区编码:  "+ amapLocation.getAdCode() + "\n");
                    dz.append("获取当前定位点的AOI信息:  "+ amapLocation.getAoiName() + "\n");
                    dz.append("获取当前室内定位的建筑物Id:  "+ amapLocation.getBuildingId() + "\n");
                    dz.append("获取当前室内定位的楼层:  "+ amapLocation.getFloor() + "\n");
                    dz.append("获取GPS的当前状态:  "+ amapLocation.getGpsAccuracyStatus() + "\n");
                    //获取定位时间
                    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    Date date = new Date(amapLocation.getTime());
                    dz.append("获取定位时间:  "+  df.format(date)+ "\n");
                    location.setText(dz);
                    // 停止定位
                    mlocationClient.stopLocation();
                } else {
                    //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
                    Log.e("AmapError", "location Error, ErrCode:"
                            + amapLocation.getErrorCode() + ", errInfo:"
                            + amapLocation.getErrorInfo());
                }
            }
            else{
                Toast.makeText(getBaseContext(),"定位失败",Toast.LENGTH_SHORT).show();

            }
        } catch (Exception e) {
        }
    }

    @Override
    protected void onStop() {
        super.onStop();
        // 停止定位
        if (null != mlocationClient) {
            mlocationClient.stopLocation();
        }
    }

    /**
     * 销毁定位
     */
    private void destroyLocation() {
        if (null != mlocationClient) {
            /**
             * 如果AMapLocationClient是在当前Activity实例化的,
             * 在Activity的onDestroy中一定要执行AMapLocationClient的onDestroy
             */
            mlocationClient.onDestroy();
            mlocationClient = null;
        }
    }

    @Override
    protected void onDestroy() {
        destroyLocation();
        super.onDestroy();
    }

}

结果图

 

猜你喜欢

转载自blog.csdn.net/qq_50395641/article/details/127680683
今日推荐