• 技术文章 >Java >java教程

    Android实现GPS定位代码实例

    高洛峰高洛峰2017-01-07 14:55:57原创1274
    通过GPS取得的是一个Location类型的经纬度, 可以转换为两个Double 纬度和经度.
    纬度: 23.223871812820435
    纬度: 113.58986039161628
    首先创建一个TextView和两个Button

    <TextView
     android:id="@+id/text"
     android:layout_width="fill_parent"
      android:layout_height="wrap_content"  />
      
     <Button
      android:id="@+id/btnStart"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="定位" />
     <Button
      android:id="@+id/btnStop"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="停止" />

    然后添加主Activity的代码
    Location 是存放经纬度的一个类型
    LocationManager是位置管理服务类型

    private Button btnStart;
    private Button btnStop;
    private TextView textView;
    private Location mLocation;
    private LocationManager mLocationManager;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
      
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
      
     btnStart = (Button)findViewById(R.id.btnStart);
     btnStop = (Button)findViewById(R.id.btnStop);
     textView = (TextView)findViewById(R.id.text);
     btnStart.setOnClickListener(btnClickListener); //开始定位
     btnStop.setOnClickListener(btnClickListener); //结束定位按钮
    }
    gpsIsOpen是自己写的查看当前GPS是否开启
    getLocation 是自己写的一个获取定位信息的方法
    mLocationManager.removeUpdates()是停止当前的GPS位置监听
    public Button.OnClickListener btnClickListener = new Button.OnClickListener()
    {
     public void onClick(View v)
     {
      Button btn = (Button)v;
      if(btn.getId() == R.id.btnStart)
      {
       if(!gpsIsOpen())
        return;
        
      mLocation = getLocation();
        
       if(mLocation != null)
        textView.setText("维度:" + mLocation.getLatitude() + "\n经度:" + mLocation.getLongitude());
       else
        textView.setText("获取不到数据");
      }
      else if(btn.getId() == R.id.btnStop)
      {
       mLocationManager.removeUpdates(locationListener);
      }
     
     }
    };
    private boolean gpsIsOpen()
    {
     boolean bRet = true;
     
     LocationManager alm = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
     if(!alm.isProviderEnabled(LocationManager.GPS_PROVIDER))
     {
      Toast.makeText(this, "未开启GPS", Toast.LENGTH_SHORT).show();
      bRet = false;
     }
     else
     {
      Toast.makeText(this, "GPS已开启", Toast.LENGTH_SHORT).show();
     }
     
     return bRet;
    }
    判断当前是否开启GPS
    private boolean gpsIsOpen()
    {
     boolean bRet = true;
      
     LocationManager alm = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
     if(!alm.isProviderEnabled(LocationManager.GPS_PROVIDER))
     {
      Toast.makeText(this, "未开启GPS", Toast.LENGTH_SHORT).show();
      bRet = false;
     }
     else
     {
      Toast.makeText(this, "GPS已开启", Toast.LENGTH_SHORT).show();
     }
     
     return bRet;
    }
    该方法获取当前的经纬度, 第一次获取总是null
    后面从LocationListener获取已改变的位置
    mLocationManager.requestLocationUpdates()是开启一个LocationListener等待位置变化
    private Location getLocation()
    {
     //获取位置管理服务
     mLocationManager = (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 = mLocationManager.getBestProvider(criteria, true); //获取GPS信息
     
     Location location = mLocationManager.getLastKnownLocation(provider);
      
     mLocationManager.requestLocationUpdates(provider, 2000, 5, locationListener);
      
     return location;
    }
    改方法是等待GPS位置改变后得到新的经纬度
    private final LocationListener locationListener = new LocationListener()
    {
     public void onLocationChanged(Location location)
     {
      // TODO Auto-generated method stub
      if(location != null)
       textView.setText("维度:" + location.getLatitude() + "\n经度:"
          + location.getLongitude());
      else
       textView.setText("获取不到数据" + Integer.toString(nCount));
     }
     
     public void onProviderDisabled(String provider)
     {
      // TODO Auto-generated method stub
     }
     
     public void onProviderEnabled(String provider)
     {
      // TODO Auto-generated method stub
     }
     
     public void onStatusChanged(String provider, int status, Bundle extras)
     {
      // TODO Auto-generated method stub
       
     }
    };


    更多Android实现GPS定位代码实例相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Android GPS
    上一篇:Android GPS定位测试(附效果图和示例) 下一篇:android通过gps获取定位的位置数据和gps经纬度
    千万级数据并发解决方案

    相关文章推荐

    • 一起来理解Java中的泛型• 整理分享Java语言表达式的五个谜题• java反射机制详细解析(总结分享)• 快速上手Java数据结构之字符串• 详细整理java枚举的使用总结
    1/1

    PHP中文网