1.LocationManager
LocationManager系统服务是位置服务的核心组件,它提供了一系列方法来处理与位置相关的问题。
与LocationManager相关的两个知识点:
1.1 provider
LocationManager获取位置信息的途径,常用的有两种:GPS和NETWORK。GPS定位更精确,缺点是只能在户外使用,耗电严重,速度较慢NETWORK通过蜂窝网络或无线网络来获取位置信息,室内室外均可用,速度较快,耗电较少。
为了获取用户位置信息,我们可以使用其中一个,也可以同时使用两个。
1.2LocationListener
位置监听器接口,定义了常见的provider状态变化和位置的变化的方法,我们需要实现此接口,完成自己的处理逻辑,然后让LocationManager注册此监听器,完成对各种状态的监听。
2.LocationManager的使用
一般情况下,在Service里使用比较常用。
public class GPSService extends Service { private LocationManager lm; private MyLocationListener listener; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); lm = (LocationManager) getSystemService(LOCATION_SERVICE); listener = new MyLocationListener(); // 注册监听位置服务 // 给位置提供者设置条件 Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); String proveder = lm.getBestProvider(criteria, true); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } lm.requestLocationUpdates(proveder, 0, 0, listener); //注册位置更新监听(最小时间间隔为5秒,最小距离间隔为5米) //lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 5, listener); } @Override public void onDestroy() { super.onDestroy(); // 取消监听位置服务 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } lm.removeUpdates(listener); listener = null; } class MyLocationListener implements LocationListener{ /** * 当位置改变的时候回调 */ @Override public void onLocationChanged(Location location) { String longitude = "j:" + location.getLongitude() + " "; String latitude = "w:" + location.getLatitude() + " "; String accuracy = "a" + location.getAccuracy() + " "; } /** * 当状态发生改变的时候回调 开启--关闭 ;关闭--开启 */ @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 } } }