当前位置: 代码迷 >> Android >> GPS在Android的应用经验
  详细解决方案

GPS在Android的应用经验

热度:66   发布时间:2016-05-01 19:15:35.0
GPS在Android的使用经验

GPS的开发、使用,有两个关键点:

1. 选择并激活合适的Provider;

2. 建立合理刷新机制。

?

下面是通用的方法,以“选择并激活合适的Provider”:

?

protected void getAndTraceLocation(){		//geocoder = new Geocoder(this, Locale.getDefault());;		geocoder = new Geocoder(this, Locale.ENGLISH);;		// Acquire a reference to the system Location Manager		locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);		Criteria criteria = new Criteria();		criteria.setAccuracy(Criteria.ACCURACY_FINE);		criteria.setAltitudeRequired(false);		criteria.setBearingRequired(false);		criteria.setCostAllowed(true);		criteria.setPowerRequirement(Criteria.POWER_LOW);		String provider = locationManager.getBestProvider(criteria, true);		if(provider!=null){			Log.i(TAG, "GPS provider is enabled:" + provider.toString());			// Get the location			latestLocation = locationManager.getLastKnownLocation(provider);			updateWithNewLocation(latestLocation);				// Register the listener with the Location Manager to receive location			locationManager.requestLocationUpdates(provider, 1000, 5, locationListener);		}else{			Log.i(TAG, "No GPS provider found!");			updateWithNewLocation(null);		}	}
	protected final LocationListener locationListener = new LocationListener() {		public void onLocationChanged(Location location) {			Log.i(TAG, "location changed to: " + location);			updateWithNewLocation(location);		}		public void onProviderDisabled(String provider) {}		public void onProviderEnabled(String provider) {}		public void onStatusChanged(String provider, int status, Bundle extras) {}	};

?

需要注意的是:

这里的locationManager.getBestProvider(criteria, true) 之后,必须进行是否为null的判断,否则在终端禁用GPS和网络以后会出现NPE异常。

?

注意这里回调了一个通用的updateWithNewLocation(latestLocation)方法,用户只要实现这个方法,即可实现第二个关键点,即“建立合理刷新机制”。

?

下面是最简单的例子:

?

@Overrideprotected void updateWithNewLocation(Location location) {    	super.updateWithNewLocation(location);    			String location_msg = context.getString(R.string.msg_no_gps);		if (location != null) {			location_msg = location.getLatitude() + "," + location.getLongitude();						Log.i(TAG, location_msg);		} else {			Log.i(TAG, location_msg);		}				location_msg = String.format(_location_msg, location_msg);		_location.setText(location_msg);	}
?

完毕!

  相关解决方案