在配备Android系统的手机中,一般都配备了GPS设备。Android为我们获取GPS数据提供了很好的接口。本文来说一下如何使用Android获取GPS的经纬度。

1 从Service继承一个类。
2 创建startService()方法。
3 创建endService()方法 重载onCreate方法和onDestroy方法,并在这两个方法里面来调用startService以及endService。
4 在startService中,通过getSystemService方法获取Context.LOCATION_SERVICE。
5 基于LocationListener实现一个新类。默认将重载四个方法onLocationChanged、onProviderDisabled、onProviderEnabled、onStatusChanged。对于onLocationChanged方法是我们更新最新的GPS数据的方法。一般我们的操作都只需要在这里进行处理。
6 调用LocationManager的requestLocationUpdates方法,来定期触发获取GPS数据即可。在onLocationChanged函数里面可以实现我们对得到的经纬度的最终操作。
7 最后在我们的Activity里面通过按钮来启动Service,停止Service。

示意代码如下:

package com.jouhu.gpsservice; import android.app.Service;import android.content.Context;import android.content.Intent;import android.location.LocationListener;import android.location.LocationManager;import android.os.Binder;import android.os.IBinder;import android.util.Log; public class GPSService extends Service {     //2000ms    private static final long minTime = 2000;    //最小变更距离 10m    private static final float minDistance = 10;     String tag = this.toString();     private LocationManager locationManager;    private LocationListener locationListener;     private final IBinder mBinder = new GPSServiceBinder();     public void startService()    {        locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);        locationListener = new GPSServiceListener();        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, locationListener);    }     public void endService()    {        if(locationManager != null && locationListener != null)        {            locationManager.removeUpdates(locationListener);        }    }     @Override    public IBinder onBind(Intent arg0) {        // TODO Auto-generated method stub        return mBinder;    }     @Override    public void onCreate()    {        //        startService();        Log.v(tag, "GPSService Started.");    }     @Override    public void onDestroy()    {        endService();        Log.v(tag, "GPSService Ended.");    }     public class GPSServiceBinder extends Binder {        GPSService getService() {            return GPSService.this;        }    }}
GPRSServiceListener的实现:

package com.jouhu.gpsservice; import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.GregorianCalendar;import java.util.TimeZone; import android.location.Location;import android.location.LocationListener;import android.location.LocationProvider;import android.os.Bundle;import android.util.Log;import android.widget.Toast; public class GPSServiceListener implements LocationListener {     private static final String tag = "GPSServiceListener";    private static final float minAccuracyMeters = 35;    private static final String hostUrl = "http://doandroid.info/gpsservice/position.php?";    private static final String user = "huzhangyou";    private static final String pass = "123456";    private static final int duration = 10;    private final DateFormat timestampFormat = new SimpleDateFormat("yyyyMMddHHmmss");     public int GPSCurrentStatus;     @Override    public void onLocationChanged(Location location) {        // TODO Auto-generated method stub        if(location != null)        {            if (location.hasAccuracy() && location.getAccuracy() <= minAccuracyMeters)            {                //获取时间参数,将时间一并Post到服务器端                GregorianCalendar greg = new GregorianCalendar();                TimeZone tz = greg.getTimeZone();                int offset = tz.getOffset(System.currentTimeMillis());                greg.add(Calendar.SECOND, (offset/1000) * -1);                StringBuffer strBuffer = new StringBuffer();                strBuffer.append(hostUrl);                strBuffer.append("user=");                strBuffer.append(user);                strBuffer.append("&pass=");                strBuffer.append(pass);                strBuffer.append("&Latitude=");                strBuffer.append(location.getLatitude());                strBuffer.append("&Longitude=");                strBuffer.append(location.getLongitude());                strBuffer.append("&Time=");                strBuffer.append(timestampFormat.format(greg.getTime()));                strBuffer.append("&Speed=");                strBuffer.append(location.hasSpeed());                doGet(strBuffer.toString());                Log.v(tag, strBuffer.toString());            }        }    }     //将数据通过get的方式发送到服务器,服务器可以根据这个数据进行跟踪用户的行走状态    private void doGet(String string) {        // TODO Auto-generated method stub        //    }     @Override    public void onProviderDisabled(String provider) {        // TODO Auto-generated method stub    }     @Override    public void onProviderEnabled(String provider) {        // TODO Auto-generated method stub     }     @Override    public void onStatusChanged(String provider, int status, Bundle extras)    {        // TODO Auto-generated method stub        GPSCurrentStatus = status;    } }


原文地址: http://www.189works.com/article-34133-1.html


更多相关文章

  1. Android开发之低调的Service
  2. android与sqlite的连接(增、删、查、改)
  3. Android获取屏幕分辨率及DisplayMetrics简介
  4. 浅析 Android(安卓)生命周期(一)
  5. 浅谈Java中Collections.sort对List排序的两种方法
  6. mybatisplus的坑 insert标签insert into select无参数问题的解决
  7. python起点网月票榜字体反爬案例
  8. Python list sort方法的具体使用
  9. python list.sort()根据多个关键字排序的方法实现

随机推荐

  1. 2011.07.14——— android res与assets的
  2. Android(安卓)Q之提前适配攻略(五)(存储权限
  3. Android 屏幕适配:最全面的解决方案
  4. android实现对SQLite数据库的增、删、改
  5. android.support.v4
  6. Android小白成长之初级篇:NDK配置
  7. Android自学 --点击事件以及弹出菜单
  8. Android(安卓)NDK开发技巧二
  9. Android下拉刷新完全解析,教你如何一分钟
  10. Android实现给TableLayou绘制边框的方法