由于移动设备相比于电脑可以随身携带,我们通过地理定位的技术就可以随时得知自己所在的位置,从而围绕这一点开发出很多有意思的应用。

基于位置的服务简称LBS,这个技术随着移动互联网的兴起,在最近的几年里十分火爆。 其实它本身并不是什么时髦的技术,主要的工作原理就是利用无线电通讯网络或GPS 等定位方式来确定出移动设备所在的位置,而这种定位技术早在很多年前就已经出现了。

       那为什么 LBS 技术直到最近几年才开始流行呢?这主要是因为,在过去移动设备的功 能极其有限,即使定位到了设备所在的位置,也就仅仅只是定位到了而已,我们并不能在位 置的基础上进行一些其他的操作。而现在就大大不同了,有了 Android 系统作为载体,我们 可以利用定位出的位置进行许多丰富多彩的操作。比如说天气预报程序可以根据用户所在的 位置自动选择城市,发微博的时候我们可以向朋友们晒一下自己在哪里,不认识路的时候随 时打开地图就可以查询路线,等等等等。

 

——位置提供者

       选择一个位置提供器来确定设备当前的位置。Android 中一般有三种位置提供器可供选择,GPS_PROVIDER、NETWORK_PROVIDER 和 PASSIVE_PROVIDER。

——GPS_PROVIDER(基于GPS的位置提供者)

GPS卫星组成的空间部分,若干地面站组成的控制部分和用户手中的接收机。

必须保证在各处能时时观测到4颗卫星,这样才能保证GPS系统的准确定位。

               GPS定位受环境影响较大,在晴朗的空地上,较容易搜索到卫星,而在室内通常是无法搜索到卫星的。GPS定位需要使用GPS功能模块,而GPS功能模块的耗电量是巨大的。

       

——NETWORK_PROVIDER(基于网络的位置提供者)

              1.WIFI定位:其原理是首先收集每个WIFI无线接入点的位置,对每个无线路由器进行唯一的标识,在数据库中注明这些接入点的具体位置。 使用时,一旦发现有WI-FI接入点,则进入到数据中查看匹配的记录,进而得到位置信息。

 

           

——PASSIVE_PROVIDER(被动位置提供者)

——LocationManager:其实基于位置的服务所围绕的核心就是要确定出自己所在的位置,这在 Android 中并不困难,主要借助 这个类就可以实现了。
 LocationManager locationManager =(LocationManager)getSystemService(Context.LOCATION_SERVICE);
——LocationProvider:提供定位功能的组件集合
——Criteria:代表一个过滤的条件
Criteria criteria =  new
// //设置定位精确度Criteria
criteria.setAccuracy(Criteria.ACCURACY_FINE);
// //设置是否需要海拔信息
criteria.setAltitudeRequired(false);
// //设置是否需要方位信息
criteria.setBearingRequired(false);
// //设置是否允许运营商收费
criteria.setCostAllowed(true);
// //设置对电源的要求
criteria.setPowerRequirement(Criteria.POWER_LOW);
final String bestProvider =lm.getBestProvider(criteria, true);

 

——LocationListener

 

       onProviderEnabled:在用户启动具有定位功能的硬件是被调用

   onProviderDisabled:在提供定位功能的硬件状态改变是被调用

      onLocationChanged:在设备的位置改变时被调用

写一个简单的例子,来获取所有的LocalProvider

代码如下:


public class MainActivity extends Activity {

	private LocationManager mLocationManager;
	private ListView list;
	private Criteria mCriteria;
	String bestProvider;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		list=(ListView) findViewById(R.id.list);
		mCriteria=new Criteria();
		//设置定位精度Criteria
		mCriteria.setAccuracy(Criteria.ACCURACY_FINE);
		//设置是否需要海拔信息
		mCriteria.setCostAllowed(true);
		//设置是否需要方位信息
		mCriteria.setBearingRequired(true);
		//设置是否允许运营商收费
		mCriteria.setCostAllowed(false);
		//设置对电源的要求
		//mCriteria.setPowerRequirement(Criteria.POWER_LOW);
		mLocationManager=(LocationManager) getSystemService(LOCATION_SERVICE);
		//获取所有的位置提供者
		//List<String>lists=mLocationManager.getAllProviders();
		List<String>lists=mLocationManager.getProviders(mCriteria, false);
		ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,lists);
		list.setAdapter(adapter);
	}
}



布局文件就一个listview,我就不贴代码了~

注意:要加权限


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