First:
关联高德地图的SDK,Android Studio是在app build.gradle 中的dependencies 根节点下添加
compile 'com.amap.api:location:latest.integration'//定位
compile 'com.amap.api:search:latest.integration'//搜索
compile 'com.amap.api:3dmap:latest.integration'//3D地图
等语句,具体根据项目需求从官方api文档中查找。eclipse 则是直接从官方下载相应的jar包粘贴到lib文件夹下,然后再与项目关联。
Second:
在高德开发平台上根据其具体要求创建一个新的应用,其中 SHA1 的获取是进入Dos操作系统界面通过 keytool -list -v -keystore 命令获取,
签名发布包的SHA1的获取方式为keytool -list -v -keystore 文件路径\XXX.jks,如:keytool -list -v -keystore D:\XXXX\XXXX\app\XXX.jks,
具体界面如图所示:
debug包的SHA1的获取方式为cd .android (回车),keytool -list -v -keystore debug.keystore 具体如图所示
其中发布包的密钥库密码为你打签名包时的.jks文件密码,debug包的密钥库密码正常都是android。(ps:Dos操作界面输入密码是没有提示的)输入完,回车就好了。PackageName的获取就是在app目录下AndroidManifest文件中的包名。
Third:
在app目录下的AndroidManifest文件配置相关权限以及key,key配置在application根节点下,具体为
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="key值" />
<service android:name="com.amap.api.location.APSService"/>
<service android:name="com.amap.api.location.APSService"/>
相关的权限主要为
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
因为定位权限是危险权限,在Android 6 以后都要在代码中动态请求,才会有效果。
扫描二维码关注公众号,回复:
4763549 查看本文章
Fourth:
封装Location
import android.content.Context;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
public class Location {
AMapLocationClient client;
AMapLocationClientOption option;
AMapLocationListener listener;
public Location(Context mContext, AMapLocationListener listener) {
this.client = new AMapLocationClient(mContext);
//初始化定位参数
option = new AMapLocationClientOption();
this.listener = listener;
init();
}
public void init() {
//设置定位监听
client.setLocationListener(listener);
//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位间隔,单位毫秒,默认为2000ms
option.setInterval(10000);
//设置定位参数
client.setLocationOption(option);
// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
// 注意设置合适的定位时间的间隔(最小间隔支持为1000ms),并且在合适时间调用stopLocation()方法来取消定位请求
// 在定位结束后,在合适的生命周期调用onDestroy()方法
// 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除
//启动定位
client.startLocation();
}
/**
* 销毁Client
*/
public void destory() {
client.stopLocation();
client.onDestroy();
}
}
到这基本都完成了,小白一枚有什么问题请多多包涵,继续写bug!!!