Android 高德地图定位城市,通过高德天气API获取天气情况

一、使用高德地图定位当前城市

1、官网首页 | 高德控制台注册用户,进入控制台,创建Android应用

上述完成后,点-->添加

 

以上操作完成后,就会有Key,备用,后面会用到

2、地图API引入

定位API,在Module的build.gradle中引入

implementation 'com.amap.api:location:latest.integration';

 3、配置AndroidManifest.xml

在application标签中声明service组件,

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

4、声明权限

<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--用于写入缓存数据到扩展存储卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--如果设置了target >= 28 如果需要启动后台定位则必须声明这个权限-->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明-->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>

5、设置高德Key ,上面申请的Key在这里使用

<meta-data android:name="com.amap.api.v2.apikey" android:value="key">       
            
</meta-data>

6、初始化定位,配置参数并启动定位。下面上代码

private AMapLocationClient mLocationClient = null;
private void initMap() {
    AMapLocationClient.updatePrivacyShow(getApplicationContext(), true, true);
    AMapLocationClient.updatePrivacyAgree(getApplicationContext(), true);
    try {
        mLocationClient = new AMapLocationClient(getApplicationContext());
    } catch (Exception e) {
        e.printStackTrace();
    }

    if (null != mLocationClient) {
        mLocationClient.setLocationListener(mLocationListener);
        AMapLocationClientOption mLocationOption = new AMapLocationClientOption();
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
        mLocationOption.setOnceLocation(true);
        mLocationOption.setLocationCacheEnable(false);
        mLocationClient.setLocationOption(mLocationOption);
        mLocationClient.startLocation();
    }
}

private final AMapLocationListener mLocationListener = aMapLocation -> {
    if (aMapLocation != null) {
        if (aMapLocation.getErrorCode() == 0) {
            // 城市名
            String cityName = aMapLocation.getCity();
            // 可根据城市的 adcode获取相应城市的天气情况
            String cityAdCode = aMapLocation.getAdCode();
               
            Log.d(TAG, "onLocationChanged: city: " + cityName + " adCode: " + cityAdCode);
        } else {
            // 定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。
            Log.e("AMapError","location Error, ErrCode:"
                    + aMapLocation.getErrorCode() + ", errInfo:"
                    + aMapLocation.getErrorInfo());
        }
    }
};

 二、使用高德API获取天气

文档地址:天气查询-API文档-开发指南-Web服务 API | 高德地图API

1、申请Key,特别注意,这里的Key是Web服务类型的,与上面Android不通用

 2、根据文档,拼成Url请求,请求方式: GET

高德天气查询API服务地址:

实时天气

https://restapi.amap.com/v3/weather/weatherInfo?key="申请的Web服务类型的key"&city="上面通过定位获取到的城市adCode"

预报天气

https://restapi.amap.com/v3/weather/weatherInfo?key="申请的Web服务类型的key"&extensions=all&city="上面通过定位获取到的城市adCode"

3、请求的结果默认是Json格式的,根据官方文档进行解析就可以了。

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值