在高德官网下载SDK,如我这里须要获取定位信息,故仅下载“定位功能”android
注册成为开发者,并建立应用获取相应的key。其中,在使用Android Studio在获取SHA1时,可能出现win10的Terminal 工具没法输入(或输入有问题)时,解决方法。git
将以前下载的SDK的jar包放入相应项目的libs中;api
在 build.gradle 文件的 dependencies 中配置 compile fileTree(include: ['*.jar'], dir: 'libs')。 缓存
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) }
若是仍是找不到jar包,可加入下列语句,进行编译便可(编译完成后也可删除,不会出问题)。网络
compile files('libs/umeng_social_sdk.jar')
在application标签中加入app
(1)ide
<meta-data android:name="com.amap.api.v2.apikey" <!--注意此处不能变,对应jar包中相应的内容--> android:value="**********"/> <!--此处为本身第二步中申请的key值-->
(2)声明Service组件。在application标签中声明service组件,每一个app拥有本身单独的定位service工具
<service android:name="com.amap.api.location.APSService"></service>
声明权限gradle
<!--用于进行网络定位--> <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>
初始化定位,配置参数,参考ui
/初始化定位参数 private void initLoc() { //初始化定位 mLocationClient = new AMapLocationClient(getApplicationContext()); //初始化定位监听 mLocationListener = new AMapLocationListener(){ @Override //实现监听器,在监听器的回调方法内解析AMapLocation对象 public void onLocationChanged(AMapLocation amapLocation) { if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) {//解析amapLocation获取相应内容 amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表 String address = amapLocation.getAddress();//地址,若是option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息 amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表 amapLocation.getLatitude();//获取纬度 amapLocation.getLongitude();//获取经度 amapLocation.getAccuracy();//获取精度信息 amapLocation.getAddress();//地址,若是option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。 String address1 = amapLocation.getCountry() //国家信息 + amapLocation.getProvince() //省信息 + amapLocation.getCity() //城市信息 + amapLocation.getDistrict() //城区信息 + amapLocation.getStreet() //街道信息 + amapLocation.getStreetNum() //街道门牌号信息 + amapLocation.getPoiName(); //获取当前定位点的POI信息(Point Of Interest) amapLocation.getGpsAccuracyStatus();//获取GPS的当前状态 //获取定位时间 SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss"); Date date = new Date(amapLocation.getTime()); String time = df.format(date); }else { //定位失败时,可经过ErrCode(错误码)信息来肯定失败的缘由,errInfo是错误信息,详见错误码表。 Log.e("AmapError","location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo()); Toast.makeText(getApplicationContext(), "定位失败", Toast.LENGTH_LONG); } } } }; //设置定位回调监听 mLocationClient.setLocationListener(mLocationListener); //初始化AMapLocationClientOption对象 mLocationOption = new AMapLocationClientOption(); //设置定位模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置是否返回地址信息(默认返回地址信息) mLocationOption.setNeedAddress(true); //获取最近3s内精度最高的一次定位结果: //设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。 // 若是设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。 mLocationOption.setOnceLocationLatest(true); //设置是否强制刷新WIFI,默认为true,强制刷新,会增长电量损耗,但精度高 mLocationOption.setWifiActiveScan(true); //单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。 mLocationOption.setHttpTimeOut(20000); //给定位客户端对象设置定位参数 mLocationClient.setLocationOption(mLocationOption); }
启动定位
mLocationClient.startLocation();
中止定位
mLocationClient.stopLocation();//中止定位后,本地定位服务并不会被销毁
销毁定位客户端。销毁定位客户端以后,若要从新开启定位请从新New一个AMapLocationClient对象
mLocationClient.onDestroy();//销毁定位客户端,同时销毁本地定位服务