Android高德地图SDK的使用
开这者平台Android Studio 在Android Studio新建项目SDSYu
外部配置
获取高德key
SHA1的获取:
打开控制台:
然后输入cd .android 回车
在输入:keytool -list -v -keystore debug.keystore 在回车可以看到下面的情况
这里就能找到你要的SHA1了
PackName的获取
打开
这句话就是:
点击提交:
样子就给咱们的SDSYu的配置好了高德的外部配置
SDSYu工程内部配置了
添加高德的定位架包:
9. 在AndroidManifest.xml的application标签中配置Key:
XML
<meta-data android:name= "com.amap.api.v2.apikey" android:value= "您的Key" ></meta-data>
这里你的key就是刚才在网站生成的key值
在application标签中声明service组件:
XML
<service android:name= "com.amap.api.location.APSService" ></service>
在AndroidManifest.xml中配置权限:
XML
<!--用于进行网络定位--> <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> <!--用于申请获取蓝牙信息进行室内定位--> <uses-permission android:name= "android.permission.BLUETOOTH" ></uses-permission><uses-permission android:name= "android.permission.BLUETOOTH_ADMIN" ></uses-permission>
finished
然后测试:
package com.example.a11699.sdsyu.activities; import android.provider.ContactsContract; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; 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 com.example.a11699.sdsyu.R; import static android.provider.ContactsContract.*; public class ceshiActicity extends AppCompatActivity { public AMapLocationClient mLocationClient = null ; // 声明定位回调监听器 public AMapLocationClientOption mLocationOption = null ; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout. activity_ceshi_acticity ); initMap(); } private void initMap(){ // 初始化定位 mLocationClient = new AMapLocationClient(ceshiActicity. this ); // 设置定位回调监听 mLocationClient .setLocationListener( mLocationListener ); mLocationOption = new AMapLocationClientOption(); // 设置定位模式为高精度模式, AMapLocationMode.Battery_Saving 为低功耗模式, AMapLocationMode.Device_Sensors 是仅设备模式 mLocationOption .setLocationMode(AMapLocationClientOption.AMapLocationMode. Hight_Accuracy ); // 设置是否返回地址信息(默认返回地址信息) mLocationOption .setNeedAddress( true ); // 设置是否只定位一次 , 默认为 false mLocationOption .setOnceLocation( false ); // 设置是否强制刷新 WIFI ,默认为强制刷新 mLocationOption .setWifiActiveScan( true ); // 设置是否允许模拟位置 , 默认为 false ,不允许模拟位置 mLocationOption .setMockEnable( false ); // 设置定位间隔 , 单位毫秒 , 默认为 2000ms mLocationOption .setInterval( 2000 ); // 给定位客户端对象设置定位参数 mLocationClient .setLocationOption( mLocationOption ); // 启动定位 mLocationClient .startLocation(); } public AMapLocationListener mLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null ) { if (aMapLocation.getErrorCode() == 0 ) { // 定位成功回调信息,设置相关消息 aMapLocation.getLocationType(); // 获取当前定位结果来源,如网络定位结果,详见定位类型表 aMapLocation.getLatitude(); // 获取纬度 aMapLocation.getLongitude(); // 获取经度 aMapLocation.getAccuracy(); // 获取精度信息 java.text.SimpleDateFormat df = new java.text.SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); aMapLocation.getAddress(); // 地址,如果 option 中设置 isNeedAddress 为 false ,则没有此结果,网络定位结果中会有地址信息, GPS 定位不返回地址信息。 aMapLocation.getCountry(); // 国家信息 aMapLocation.getProvince(); // 省信息 aMapLocation.getCity(); // 城市信息 aMapLocation.getDistrict(); // 城区信息 aMapLocation.getStreet(); // 街道信息 aMapLocation.getStreetNum(); // 街道门牌号信息 aMapLocation.getCityCode(); // 城市编码 aMapLocation.getAdCode(); // 地区编码 Log. i ( "zjc" , aMapLocation.getCity()); mLocationClient .stopLocation(); // 停止定位 } else { // 显示错误信息 ErrCode 是错误码, errInfo 是错误信息,详见错误码表。 Log. e ( "info" , "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } } }; }
如果log打印输出:
这个缺少的权限是你的手机里的定位权限,而不是代码配置的权限,代码里给了权限,而你在手机禁用了
手机给了权限后:
可以看到定位到了:地名 杭州