Android——确定自己的位置(获得经纬度)

1、在配置文件里添加<uses-permission>标签

android:name="android.permission.ACCESS_FINE_LOCATION"

或者是

android:name="android.permission.ACCESS_COARSE_LOCATION"

(GPS提供器要求fine权限,而网络提供器只要求coarse权限)

2、获得位置管理器

LocationManager locationManager=(LocationManager)getSystem(Context.LOCATION_SERVICE);

3、指定提供器类型

String provider=LocationManager.GPS_PROVIDER;


还可以通过获得位置提供器来获取位置信息

获得位置提供器

(1)根据名称获得位置提供器

String provider=LocationManager.GPS_PROVIDER;
LocationProvider myProvider=locationManager.getProvider(provider);


(2)获得当前可用的位置提供器

List<String> providers=locationManager.getProviders(true);


(3)根据Criteria条件获得位置提供器

Criteria封装了locationProvider的条件(费用、耗电量、精确度、方位、速度、高度)

属性或访求名称 描述
ACCERACY_COARSE 粗糙精确度
ACCURACY_FINE 较高精确度
POWER_HING 用电高
POWER_LOW 用电低
isAlititudeRequried() 返回Provider是否需要高度信息
isBearingRequired() 返回Provider是否需要方位信息
isSpeedRequried() 返回Provider是否需要速度信息
isCostAllowed() 是否允许产生费用
setAccuracy(int accuracy) 设置Provider的精确度
setAltitudeRequired (boolean altitudeRequired) 设置Provider是否需要高度信息
setBearingRequired (boolean bearingRequired) 设置Provider是否需要方位信息
setCostAllowed (boolean costAllowed) 设置Provider是否产生费用
setSpeedAccuracy (int accuracy) 设置Provider是否需要速度信息
getAccuracy() 获得精度

下面代码是根据条件获得LocationProvider

//根据条件获得LocationProvider
	//实例化Criteria
        Criteria criteria=new Criteria();
	//设置精确度
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
	//设置高度信息
        criteria.setAltitudeRequired(false);
	//设置方位信息
        criteria.setBearingRequired(true);
	//设置是否需要产生费用
        criteria.setCostAllowed(true);
	//设置电量耗费
        criteria.setPowerRequirement(Criteria.POWER_LOW);
	//获得符合条件最好的Provider
        String provider=locationManager.getBestProvider(criteria, true);
	//获得符合条件的Provider
	List<String> matchingProviders=locationManager.getProviders(critria,false);


4、获得位置信息(上一次存在的位置信息,如果没有返回null)

Location location=locationManager.getLastKnownLocation(provider);


其中可以提取位置信息的经纬度:

double lat=location.getLatitude();//获得经度信息
double lng=location.getLongitude();//获得未读信息



5、执行requestLocationUpdates——改变设备位置,传递新的监听对象,触发此方法。

//每2秒钟监听,并且移动距离超过10米才会触发

locationManager.requestLocationUpdates(provider,2000,10,locationListener);



6、编写监听器locationListener

private  final LocationListener locationListener = new LocationListener() {
		//状态改变时调用
		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			// TODO Auto-generated method stub
			
		}
		//Provider生效时调用
		@Override
		public void onProviderEnabled(String provider) {
			// TODO Auto-generated method stub
			
		}
		//Provider失效时调用
		@Override
		public void onProviderDisabled(String provider) {
			// TODO Auto-generated method stub
			updateWithNewLocation(null);
		}
		//位置改变时调用
		@Override
		public void onLocationChanged(Location location) {
			// TODO Auto-generated method stub
			updateWithNewLocation(location);
		}
	};


7、updateWithNewLocation方法

private void updateWithNewLocation(Location location) {
		// TODO Auto-generated method stub
		String latLongString;
		TextView myLocationText;
		myLocationText=(TextView) findViewById(R.id.myLocationText);
		if (location!=null) {
			double lat=location.getLatitude();
			double lng=location.getLongitude();
			latLongString="Lat:"+lat+"\nLong:"+lng;
			
		} else {
			latLongString="No Location found";
		}
		myLocationText.setText("您当前的位置:\n"+latLongString);
	}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值