Android 基于位置的开发与百度地图(一)

Android 中基于位置的开发

一、找到自己的位置

归根结底,基于位置的服务所围绕的核心就是确定自己的位置。在Android中实现起来并不困难,主要借助 LocationManager 这个类就可以实现了。
LocationManager 的基本用法:
①要想使用LocationManager 就必须要先获取它的实例
②需要选择一个位置提供器,一般情况下都是获取所有可用的位置提供器
③将选择好的位置提供器传递给getLastKnownLocation()方法中,就可以得到一个Location对象,而这个Location对象包含了你所需要的位置信息,如经纬度、海拔等。虽然此方法可以获取经纬度,但是要想获取移动后最新的位置,LocationManager 提供了一个requestLocaionUpdates()方法,只要传入一个LocationListener 实例。

实例:获取自己当前位置的经纬度
public class MainActivity extends Activity {
	
	private TextView textView;
	private LocationManager locationManager;
	private String provider;
	public static final int SHOW_LOCATION=0;
	
	/*
	 * LocationManager 的基本用法:(此例子只为获取当前位置的经纬度)
	 * 步骤一:要想使用LocationManager 首先是要获取他的实例
	 * 步骤二:选择一个位置提供器provider
	 * 步骤三:将选择好的位置提供器provider传入getLastKnownLocation()方法中,返回一个Location对象,而这个Location对象就包含了你所要位置信息的经纬度等等信息
	 * 
	 * 以上三个步骤只是得到当前设备的位置信息,若移动设备改变位置,那么如何获取最新的位置信息呢?
	 * 
	 * 步骤五:LocationManager 提供一个requestLocationUpdates()方法,只需要传入一个LocationListener的实例
	 * 步骤四:所以还需要创建一个LocationListener的实例
	 * 
	 */

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		textView=(TextView)findViewById(R.id.position);
		//步骤一:获取LocationManager的实例
		locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE);
		//步骤二:获取可用的位置提供器
		List<String> providerlist=locationManager.getProviders(true);//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(MainActivity.this, "当前没有位置提供器可以选择", Toast.LENGTH_LONG).show();
			return;
		}
		//步骤三:将选择好的位置提供器传入getLastKnownLocation()方法中,返回一个Location对象,这个Location对象就包含了你所要的位置信息
		Location location=locationManager.getLastKnownLocation(provider);
		if (location!=null){
			//显示当前设备的地理位置
			showLocation(location);
		}
		//步骤五:
		//当移动设备位置发生改变时,获取最新的位置信息;第一个参数:位置提供器;第二个参数:监听位置变化的时间间隔;
		//第三个参数为:监听位置变化的距离间隔;第四个参数:LocationListener监听器
		//这里就表示:每5秒就检测一下位置的变化情况,若移动距离大于10米,就会调用LocationListener的onLocationChanged()方法
		locationManager.requestLocationUpdates(provider, 5000, 10, locationListener);
	}	
	
	@Override
	protected void onDestroy() {
		super.onDestroy();
		if (locationManager!=null){
			locationManager.removeUpdates(locationListener);
		}
	}
	
	// 步骤四:创建 LocationListener 的实例
	LocationListener locationListener=new LocationListener() {
		
		@Override
		public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onProviderEnabled(String arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onProviderDisabled(String arg0) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onLocationChanged(Location location) {
			// TODO Auto-generated method stub
			//这里为当位置发生改变时调用的方法
			showLocation(location);
		}
	};
	
	private void showLocation(final Location location){
		String currentposition=location.getLatitude()+"\n"
				+location.getLongitude();
		textView.setText(currentposition);

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值