一、使用高德地图定位当前城市
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格式的,根据官方文档进行解析就可以了。