高德地图三:定位

高德地图三:定位

什么是定位SDK

Android 定位 SDK 是一套简单的LBS服务定位接口,您可以使用这套定位API获取定位结果、逆地理编码(地址文字描述)、以及地理围栏功能。

代码实现:

app/src/main/AndroidManifest.xml

		<!--地图包、搜索包需要的基础权限-->
		<uses-permission android:name="android.permission.INTERNET" />
		<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
		<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
		<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"  />
		<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"  />
		<uses-permission android:name="android.permission.READ_PHONE_STATE" />

		<permission android:name="android.permission.WRITE_APN_SETTINGS" />
		<!--定位包、导航包需要的额外权限(注:基础权限也需要)-->
		<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
		<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
		<!--<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />-->
		<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
		<!--用于读取手机当前的状态-->
		<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>

com/example/administrator/MainActivity.java

		package com.example.administrator;

		import android.Manifest;
		import android.app.Activity;
		import android.content.Context;
		import android.content.pm.PackageInfo;
		import android.content.pm.PackageManager;
		import android.graphics.Color;
		import android.os.Bundle;
		import android.support.v7.app.AppCompatActivity;
		import android.support.v7.widget.Toolbar;
		import android.util.Log;
		import android.widget.CompoundButton;
		import android.widget.Toast;

		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.amap.api.maps.AMap;
		import com.amap.api.maps.LocationSource;
		import com.amap.api.maps.MapView;
		import com.amap.api.maps.model.BitmapDescriptorFactory;
		import com.amap.api.maps.model.MyLocationStyle;
		import com.example.administrator.Permission.PermissionManager;

		import java.security.MessageDigest;
		import java.security.NoSuchAlgorithmException;
		import java.text.SimpleDateFormat;
		import java.util.Date;
		import java.util.Locale;

		public class MainActivity extends Activity implements CompoundButton.OnCheckedChangeListener
				,AMapLocationListener,LocationSource,PermissionManager.PermissionsResultListener {
			private MapView mapView;
			private AMap aMap;
			//定位服务类。此类提供单次定位、持续定位、地理围栏、最后位置相关功能
			private AMapLocationClient aMapLocationClient;
			private OnLocationChangedListener listener;
			//定位参数设置
			private AMapLocationClientOption aMapLocationClientOption;

			@Override
			protected void onCreate (Bundle savedInstanceState) {
				super.onCreate(savedInstanceState);
				setContentView(R.layout.activity_main);
				PermissionManager.requestPermission(this,"定位",0,this, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_COARSE_LOCATION);
				mapView = (MapView)findViewById(R.id.map);
				mapView.onCreate(savedInstanceState);  //必须写
				aMap = mapView.getMap();
				//设置地图类型
				aMap.setMapType(AMap.MAP_TYPE_NORMAL);

				MyLocationStyle locationStyle = new MyLocationStyle();
				locationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.start));
				locationStyle.strokeColor(Color.BLUE);
				locationStyle.strokeWidth(5);
				aMap.setMyLocationStyle(locationStyle);

				// 设置定位监听
				aMap.setLocationSource(this);
				aMap.getUiSettings().setMyLocationButtonEnabled(true);//设置默认定位按钮是否显示
				aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
				// 设置定位的类型为定位模式,参见类AMap。
				aMap.setMapType(AMap.MAP_TYPE_NORMAL);
				// 设置为true表示系统定位按钮显示并响应点击,false表示隐藏,默认是false
				aMap.setMyLocationEnabled(true);

				aMapLocationClient = new AMapLocationClient(getApplicationContext());
				aMapLocationClient.setLocationListener(this);

				//初始化定位参数
				aMapLocationClientOption = new AMapLocationClientOption();
				//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
				aMapLocationClientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
				//设置是否返回地址信息(默认返回地址信息)
				aMapLocationClientOption.setNeedAddress(true);
				//设置是否只定位一次,默认为false
				aMapLocationClientOption.setOnceLocation(false);
				//设置是否强制刷新WIFI,默认为强制刷新
				aMapLocationClientOption.setWifiScan(true);
				//设置是否允许模拟位置,默认为false,不允许模拟位置
				aMapLocationClientOption.setMockEnable(false);
				//设置定位间隔,单位毫秒,默认为2000ms
				aMapLocationClientOption.setInterval(2000);
				//给定位客户端对象设置定位参数
				aMapLocationClient.setLocationOption(aMapLocationClientOption);
				//启动定位
				aMapLocationClient.startLocation();
			}

			/**
			 * 定位回调监听,当定位完成后调用此方法
			 * @param aMapLocation
			 */
			@Override
			public void onLocationChanged(AMapLocation aMapLocation) {
				if(listener!=null && aMapLocation!=null) {
					listener.onLocationChanged(aMapLocation);// 显示系统小蓝点
					if (aMapLocation.getErrorCode() == 0) {
						//定位成功回调信息,设置相关消息
						aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
						aMapLocation.getLatitude();//获取经度
						aMapLocation.getLongitude();//获取纬度;
						aMapLocation.getAccuracy();//获取精度信息
						SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
						Date date = new Date(aMapLocation.getTime());
						df.format(date);//定位时间
						aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果
						aMapLocation.getCountry();//国家信息
						aMapLocation.getProvince();//省信息
						aMapLocation.getCity();//城市信息
						aMapLocation.getDistrict();//城区信息
						aMapLocation.getRoad();//街道信息
						aMapLocation.getCityCode();//城市编码
						aMapLocation.getAdCode();//地区编码
						Toast.makeText(this,"定位成功",Toast.LENGTH_SHORT).show();
					} else {
						Toast.makeText(this,"定位失败",Toast.LENGTH_SHORT).show();
						//显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
						Log.i("Tomato","location Error, ErrCode:"
								+ aMapLocation.getErrorCode() + ", errInfo:"
								+ aMapLocation.getErrorInfo());
					}
				}
			}


			@Override
			public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
			}

			@Override
			public void activate(OnLocationChangedListener onLocationChangedListener) {
				listener = onLocationChangedListener;
			}

			@Override
			public void deactivate() {

			}

			/**
			 * 方法必须重写
			 */
			@Override
			protected void onResume() {
				super.onResume();
				mapView.onResume();
			}

			/**
			 * 方法必须重写
			 */
			@Override
			protected void onPause() {
				super.onPause();
				mapView.onPause();
			}

			/**
			 * 方法必须重写
			 */
			@Override
			protected void onSaveInstanceState(Bundle outState) {
				super.onSaveInstanceState(outState);
				mapView.onSaveInstanceState(outState);
			}

			/**
			 * 方法必须重写
			 */
			@Override
			protected void onDestroy() {
				super.onDestroy();
				mapView.onDestroy();
				//销毁定位客户端
				if(aMapLocationClient!=null){
					aMapLocationClient.onDestroy();
					aMapLocationClient = null;
					aMapLocationClientOption = null;
				}
			}

			@Override
			public void onPermissionGranted(int requestCode) {

			}

			@Override
			public void onPermissionDenied(int requestCode) {

			}
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值