zoukankan      html  css  js  c++  java
  • 获取定位信息

    获取了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("实时的位置信息: ");
          sb.append("经度:");
          sb.append(newLocation.getLongitude());
          sb.append(" 纬度:");
          sb.append(newLocation.getLatitude());
          sb.append(" 高度:");
          sb.append(newLocation.getAltitude());
          sb.append(" 速度:");
          sb.append(newLocation.getSpeed());
          sb.append(" 方向:");
          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导航系统。

  • 相关阅读:
    UVaLive 7362 Farey (数学,欧拉函数)
    UVaLive 7361 Immortal Porpoises (矩阵快速幂)
    UVaLive 7359 Sum Kind Of Problem (数学,水题)
    CodeForces 706D Vasiliy's Multiset (字典树查询+贪心)
    负载均衡服务器
    集群-如何理解集群?
    架构规划
    领域模型
    状态图
    E-R图
  • 原文地址:https://www.cnblogs.com/jiww/p/5654210.html
Copyright © 2011-2022 走看看