AndroidGPS定位应用流程
这里先了解下应用层流程。
根据这个框架,GPS在应用层实现的最基本流程示例:
public class MainActivity extends Activity {
private LocationManager mLocationManager;
@Override
protected void onDestroy() {
super.onDestroy();
mLocationManager.removeUpdates(locationListener);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/* 记得在AndroidManifest.xml文件中开启GPS相关的权限!!! */
mLocationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
/* 检测GPS定位模块是否开启 */
if (!mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
/* 针对GPS定位模块是否开启,具体接下来做的事 */
return;
}
Location location = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
updateLocationMessage(location);
/* 监听GPS的状态变化 */
mLocationManager.addGpsStatusListener(listener);
/* 监听GPS的位置变化
* 这里指定2000ms或者移动距离超过4m的时候更新一次位置信息,但是
* 经过实际测试,更新间隔精确度极低,根本不按套路走。实际使用的话,还是采用Send Measage方式
*/
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 4, locationListener);
}
/* 监听GPS的状态变化 */
GpsStatus.Listener listener = new GpsStatus.Listener() {
public void onGpsStatusChanged(int event) {
switch (event) {
/* 第一次获取到定位信息 */
case GpsStatus.GPS_EVENT_FIRST_FIX:
break;
/* 卫星状态发生变化,捕获到卫星/卫星不可见 */
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
break;
case GpsStatus.GPS_EVENT_STARTED:
break;
case GpsStatus.GPS_EVENT_STOPPED:
break;
}
};
};
private LocationListener locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
updateLocationMessage(location);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
switch (status) {
case LocationProvider.AVAILABLE:
break;
case LocationProvider.OUT_OF_SERVICE:
break;
case LocationProvider.TEMPORARILY_UNAVAILABLE:
break;
}
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
};
private void updateLocationMessage(Location location) {
}
}
上面提到的是GPS最基础的框架流程,此外它还有你想得到、想不到的其他许多用法与功能。
在Android的location包中,所有与定位相关的类和接口如下: