获取了LocationManager对象之后,接下来就可通过指定LocationProvider获取定位信息。
下面程序示范了如何通过手机实时地获取定位信息,包括用户所在的经度、纬度、高度、方向、移动速度等。
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.widget.EditText;
public class LocationTest extends Activity {
//定义LocationManager对象
LocationManager locManager;
//定义程序界面中的Edittext组件
EditText show;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_test);
//获取程序界面上的Edittext组件
show = (EditText) findViewById(R.id.show);
//创建LocationManager对象
locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//从GPS获取最近的定位信息
Location location = locManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
//使用Location根据Edittext的显示
updateView(location);
//设置每3秒获取一次GPS的定位信息
locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
3000, 8, new LocationListener() {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
// 当GPS LocationProvider可用时,更新位置
updateView(locManager.getLastKnownLocation(provider));
}
@Override
public void onProviderDisabled(String provider) {
updateView(null);
}
@Override
public void onLocationChanged(Location location) {
// 当GPS定位信息发生改变时,更新位置
updateView(location);
}
});
}
//更新Edittext中显示的内容
public void updateView(Location newLocation){
if(newLocation != null){
StringBuilder sb = new StringBuilder();
sb.append("实时的位置信息:\n");
sb.append("经度:");
sb.append(newLocation.getLongitude());
sb.append("\n纬度:");
sb.append(newLocation.getLatitude());
sb.append("\n高度:");
sb.append(newLocation.getAltitude());
sb.append("\n速度:");
sb.append(newLocation.getSpeed());
sb.append("\n方向:");
sb.append(newLocation.getBearing());
show.setText(sb.toString());
}else{
//如果传入的Location对象为空则清空Edittext
show.setText("");
}
}
}
上面的程序中粗体字代码用于从Location中获取定位信息,包括用户的经度、纬度、高度、方向和移动速度等信息。程序代码中还通过LocationManager设置了一个监听器,该监听器负责每个3秒向LocationProvider请求一次定位信息,当LocationProvider可用时、不可用时或提供的定位信息发生改变时,系统会回调updateView(Location newLocation)来更新Edittext中显示的定位信息。
该程序需要有访问GPS信号的权限,因此需要在AndroidManifest.xml文件中增加如下授权代码片段:
<!-- 授权获取定位信息 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
如果把该程序与Google Map结合,让该程序根据GPS提供的信息实时地显示用户在地图上的位置,即可开发出GPS导航系统。