定位服务

Location-based services(LBS)是一个总称,用来描述寻找移动设备当前位置的不同的技术。定位服务有两个主要的类:

LocationManager:这个类提供了访问系统中定位服务的功能,允许应用程序获得移动设备的定期更新的地理位置,或者是当移动设备到达一个已知的地理位置时来产生一个Intent。

LocationProviders:这个类提供了定位的不同技术。比如说一些移动设备基于GPS定位,有些是基于基站定位的。

在Android模拟器怎么测试定位服务呢?可以通过DDMS来帮助我们。

在DDMS的Emulator Control选项卡中有一个Location Control的位置控制,可以通过send按钮发送一些位置信息到模拟器上。

举个例子来使用LocationManager这个类。

package com.figoyu.android.whereami;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import android.location.LocationListener;
import android.os.Bundle;
import android.widget.TextView;
import java.util.List;

public class WhereAmI extends Activity {

	  LocationManager locationManager;
	  
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    //getSystemService(String name)是通过名字来返回一个系统级别的服务。
    //名字是Android系统中的常量,有WINDOW_SERVICE、POWER_SERVICE等
    //详细可参见SDK文档。
    //要启动定位服务,还需在AndroidManifest.xml中加上一句 
    //
    locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);  
    updateWithNewLocation();
  }
  
  /** Update UI with a new location */
  private void updateWithNewLocation() {
	  TextView myLocationText = (TextView)findViewById(R.id.myLocationText);
	  StringBuilder sb = new StringBuilder("Enabled Providers:");
	  
	  //getProviders(boolean enabledOnly)返回定位服务的实现技术,比如GPS定位、基站定位。
	  List providers = locationManager.getProviders(true);
	  
	    for(String provider : providers){
	    	/*注册当前Activity的定位的实现技术,并通过LocationListener监测位置的变化。
	    	这可能需要一段时间才能获得最新的位置。如果需要即时位置,应用程序可能使用getLastKnownLocation(String)方法。
	    	如果定位实现技术被用户禁用,将停止更新,这时onProviderDisabled(String)方法将被调用。
	    	一旦定位实现技术重新启用,onProviderEnabled(String)方法将调用,并且位置更新将重新开始。
	    	通知更新的频率可以使用minTime和minDistance参数来控制。
	    	如果minTime大于0,LocationManager将停止更新minTime毫秒,以节省电力。
	    	如果minDistance大于0,当设备移动到minDistance时,位置信息将广播出去。
	    	为了尽可能经常获得通知,可以设置这两个参数为0;*/	    	
	    	locationManager.requestLocationUpdates(provider, 1000, 0, new LocationListener(){
	    		public void onLocationChanged(Location location){}
	    		public void onProviderDisabled(String provider){}
	    		public void onProviderEnabled(String provider){}
	    		public void onStatusChanged(String provider, int status, Bundle extras){}
	    	});
	    	
		    sb.append("/n").append(provider).append(":  ");
		    //获取最后一次的位置。
		    Location location = locationManager.getLastKnownLocation(provider);

	        if (location != null) {
	        	//获得经纬度
	    	    double lat = location.getLatitude();
	    	    double lng = location.getLongitude();
	    	    sb.append(lat).append(", ").append(lng);
	    	  } else {
	    	    sb.append("No location found"); 
	    	  }
	    }   
	  myLocationText.setText(sb);  
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值