获取了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导航系统。

posted on 2016-07-08 17:52  奋斗青年一族  阅读(676)  评论(2编辑  收藏  举报