1、进入高德开放平台;
2、注册用户登录,并成为开发者;
3、创建应用,填写应用名称和应用类型;
4、点击最右侧小三角展开什么都没有,好了现在点击右侧“添加新Key”,弹出对话框中输入 “Key名称”、”Package(应用包名)”、选择”服务平台”,然后就是”调试版和发布版的SHA1”了,可以先随意输入(一会过来改)提交后即可看到高德为我们生成的Key了
5、进入高德定位相关下载下载SDK,还有Demo和开发文档也可以一起下载;
6、将AMap_Location_Vxxx.jar放到项目libs中,没全局引用libs的在gradle中引用一下,Sync Project;
7、在AndroidManifest.xml中添加相关权限、服务和配置key
<!--用于进行网络定位-->
<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>
<service android:name="com.amap.api.location.APSService"></service>
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="c8f62c4b4012f97c200f921f41f412e0">
</meta-data>
</application>
8、相关配置完成,可以开始写码了,下面是简单定位代码,请查看文档或Demo进行开发;
AMapLocationClient locationClient = new AMapLocationClient(getApplicationContext());
AMapLocationClientOption locationOption = new AMapLocationClientOption();
// 设置定位监听
locationClient.setLocationListener(listener);
// 设置定位模式为低功耗模式
locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
//设置为单次定位
locationOption.setOnceLocation(false);
// 设置是否需要显示地址信息
locationOption.setNeedAddress(true);
// 设置定位间隔
locationOption.setInterval(2000);
...
// 设置定位参数
locationClient.setLocationOption(locationOption);
// 启动定位
locationClient.startLocation();
// 设置定位监听回调
AMapLocationListener listener = new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation location) {
if (null != location && location.getErrorCode() == 0) {
Log.v("location", "经度:" + location.getLongitude());
Log.v("location", "纬度:" + location.getLatitude());
Log.v("location", "国家:" + location.getCountry());
Log.v("location", "省:" + location.getProvince());
Log.v("location", "市:" + location.getCity());
Log.v("location", "地址:" + location.getAddress());
...
}
}
};
// 停止定位
locationClient.stopLocation();
if (null != locationClient) {
// 一定要执行AMapLocationClient的onDestroy释放资源
locationClient.onDestroy();
locationClient = null;
locationOption = null;
}
9、OK,代码完成运行代码是会定位失败的,location.getErrorCode()应该会返回7,可以查看错误码,Key鉴定失败,因为我们没有配置正确的keystore SHA1;
10、运行App是用debug签名的,默认的debug.keystore是在C:\Users\用户名.android目录下,下面介绍生成正式版的keystore;
11、Build->Generate Signed APK,选择Create new store
Key store path(keystore的路径)
Password(keystore的密码,以后打包APK要用)
Alias(密钥别名)
Password(key的密码,以后打包APK要用)
Validity(years) (密钥有效期(年))
Frist and Last Name(名字)
Organiztion Unit(组织单位)
Organiztion(组织)
City or Locality(城市)
State or Province(州或省)
Country Code(XX)(国家编码)
12、填写完成后,OK,会弹出对话框让输入Master Password密码,其实这里已经生成keystore了,返回就可以看到刚自己命名的keystore了(我上面命名为release_keystore.jks,放在桌面上),下面顺带说下打包APK,Master Password不是前面设置的keystore或key的passwod,具体怎么来的我也不清楚,知道的可以输入,不知道的是可以重置的,点击Reset按钮即可,也可以在Settings->Appearance&Behavior->System Settings->Password中点击Master Password修改或重置主密码,然后就可以进入签名APK界面,可以选择release或debug签名生成APK了;
13、获取SHA1,通过命令:
keytool -list -v -keystore debug.keystore
keytool -list -v -keystore release_keystore.jks
分别获取debug和release的SHA1,默认debug密码是android,不用输入直接回车就可以了,release的密码就是前面设置的keystore的密码,不输入直接回车也可以,然后就可以得到SHA1了;
14、在高德开放平台我的应用中找到刚才创建的应用,点击Key那栏右边的设置,分别将发布版安全码:SHA1和调试版安全码SHA1修改即可定位了;
15、其他开发人员没有你的debug.keystore是定位不成功的,除非你将的你debug.keystore替换他们的,这样很麻烦,现在在项目里配置一下debug.keystore,在module的gradle的android里面配置如下代码,
signingConfigs {
debug {
storeFile file("debug.keystore")
}
}
上面的代码要求你的debug.keystore在项目的module目录下才能读取到,当然也可以写绝对路径。