《第一行代码》读书笔记:第十一章/位置服务

基本步骤:

1:要使用LocationManager就要先获取它的实例,通过调用getSystemService()方法可以获取到

private LocationManager locationManager;

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

2:Android有三种位置提供器,最常用的是GPS或者网络定位。即GPS_PROVIDER和NETWORK_PROVIDER,前者准确,后者省电。但都需要用户主动去使用。

我们将选择的位置提供器传入getLastKnownLocation()方法,然后得到一个Location对象。我们叫它location。

private String provider;
provider=LocationManager.GPS_PROVIDER;
Location location=locationManager.getLastKnownLocation(provider);

3:如果需要判断有哪些位置提供器可用

List<String> providerList=locationManager.getProviders(true);
使用getProviders()方法,接收 返回值为true的位置提供器,即将所有打开的位置提供器传入数组 providerList,在providerList中寻找并确认自己所需要的位置提供器
如:
if(providerList.contains(LocationManager.GPS_PROVIDER)){
			provider=LocationManager.GPS_PROVIDER;
		}else if(providerList.contains(LocationManager.NETWORK_PROVIDER)){
			provider=LocationManager.NETWORK_PROVIDER;
		}else{
			Toast.makeText(this, "No locationProvider to use", Toast.LENGTH_SHORT).show();
			return;
		}

4:考虑到用户会带着设备到处移动,我们需要更新位置信息。

可以使用

requestLocationUpdates(provider, 5000, 1, locationListener){}
参数分别为位置提供器类型,监听位置变化时间间隔,监听位置变化距离间隔(米),LocationListener监视器。

getLastKnownLocation(provider)
得到具体位置信息。
5:需要权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>



具体实例:获取所在经纬度

main_xml:

文本控件。

 <TextView
        android:id="@+id/position_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

main_activity:

public class MainActivity extends ActionBarActivity {

	private TextView positionTextView;
	private LocationManager locationManager;
	private String provider;
		
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	//获取LocationManager实例
		positionTextView=(TextView)findViewById(R.id.position_text_view);
		locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
		//返回已启动的位置提供器
		List<String> providerList=locationManager.getProviders(true);
		//确定哪个位置提供器已经启动
		if(providerList.contains(LocationManager.GPS_PROVIDER)){
			provider=LocationManager.GPS_PROVIDER;
		}else if(providerList.contains(LocationManager.NETWORK_PROVIDER)){
			provider=LocationManager.NETWORK_PROVIDER;
		}else{
			Toast.makeText(this, "No locationProvider to use", Toast.LENGTH_SHORT).show();
			return;
		}
		
		//将位置提供器传入函数,得到location包含位置信息
		Location location=locationManager.getLastKnownLocation(provider);
	    //显示当前位置信息
		if(location!=null){
	    	showLocation(location);
	    }
		locationManager.requestLocationUpdates(provider, 5000, 1, locationListener);
	}

	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();//关闭时移除监听器
		if(locationManager!=null){
			locationManager.removeUpdates(locationListener);
		}
	}
	//位置管理器的监听器,以在位置改变时更新位置信息
	LocationListener locationListener=new LocationListener() {
		
		@Override
		public void onStatusChanged(String provider, int status, Bundle extras) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onProviderEnabled(String provider) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onProviderDisabled(String provider) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onLocationChanged(Location location) {
			// TODO Auto-generated method stub
			//位置改变时更新位置信息
			showLocation(location);
		}
	};


	private void showLocation(Location location) {
		// TODO Auto-generated method stub
		String currentPosition="latitude is"+location.getLatitude()
				+"\n"+"longitude is"+location.getLongitude();
		//得到纬度latitude和经度longitude
		positionTextView.setText(currentPosition);
				
	}

	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值