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打印输出:
这个缺少的权限是你的手机里的定位权限,而不是代码配置的权限,代码里给了权限,而你在手机禁用了
手机给了权限后:
可以看到定位到了:地名 杭州