歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android以後台Service的方式獲取GPRS數據

Android以後台Service的方式獲取GPRS數據

日期:2017/3/1 10:10:18   编辑:Linux編程

在配備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。

示意代碼如下:

  1. package com.jouhu.gpsservice;
  2. import android.app.Service;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.location.LocationListener;
  6. import android.location.LocationManager;
  7. import android.os.Binder;
  8. import android.os.IBinder;
  9. import android.util.Log;
  10. public class GPSService extends Service {
  11. //2000ms
  12. private static final long minTime = 2000;
  13. //最小變更距離 10m
  14. private static final float minDistance = 10;
  15. String tag = this.toString();
  16. private LocationManager locationManager;
  17. private LocationListener locationListener;
  18. private final IBinder mBinder = new GPSServiceBinder();
  19. public void startService()
  20. {
  21. locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  22. locationListener = new GPSServiceListener();
  23. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, locationListener);
  24. }
  25. public void endService()
  26. {
  27. if(locationManager != null && locationListener != null)
  28. {
  29. locationManager.removeUpdates(locationListener);
  30. }
  31. }
  32. @Override
  33. public IBinder onBind(Intent arg0) {
  34. // TODO Auto-generated method stub
  35. return mBinder;
  36. }
  37. @Override
  38. public void onCreate()
  39. {
  40. //
  41. startService();
  42. Log.v(tag, "GPSService Started.");
  43. }
  44. @Override
  45. public void onDestroy()
  46. {
  47. endService();
  48. Log.v(tag, "GPSService Ended.");
  49. }
  50. public class GPSServiceBinder extends Binder {
  51. GPSService getService() {
  52. return GPSService.this;
  53. }
  54. }
  55. }

GPRSServiceListener的實現:

  1. package com.jouhu.gpsservice;
  2. import java.text.DateFormat;
  3. import java.text.SimpleDateFormat;
  4. import java.util.Calendar;
  5. import java.util.GregorianCalendar;
  6. import java.util.TimeZone;
  7. import android.location.Location;
  8. import android.location.LocationListener;
  9. import android.location.LocationProvider;
  10. import android.os.Bundle;
  11. import android.util.Log;
  12. import android.widget.Toast;
  13. public class GPSServiceListener implements LocationListener {
  14. private static final String tag = "GPSServiceListener";
  15. private static final float minAccuracyMeters = 35;
  16. private static final String hostUrl = "http://doandroid.info/gpsservice/position.php?";
  17. private static final String user = "huzhangyou";
  18. private static final String pass = "123456";
  19. private static final int duration = 10;
  20. private final DateFormat timestampFormat = new SimpleDateFormat("yyyyMMddHHmmss");
  21. public int GPSCurrentStatus;
  22. @Override
  23. public void onLocationChanged(Location location) {
  24. // TODO Auto-generated method stub
  25. if(location != null)
  26. {
  27. if (location.hasAccuracy() && location.getAccuracy() <= minAccuracyMeters)
  28. {
  29. //獲取時間參數,將時間一並Post到服務器端
  30. GregorianCalendar greg = new GregorianCalendar();
  31. TimeZone tz = greg.getTimeZone();
  32. int offset = tz.getOffset(System.currentTimeMillis());
  33. greg.add(Calendar.SECOND, (offset/1000) * -1);
  34. StringBuffer strBuffer = new StringBuffer();
  35. strBuffer.append(hostUrl);
  36. strBuffer.append("user=");
  37. strBuffer.append(user);
  38. strBuffer.append("&pass=");
  39. strBuffer.append(pass);
  40. strBuffer.append("&Latitude=");
  41. strBuffer.append(location.getLatitude());
  42. strBuffer.append("&Longitude=");
  43. strBuffer.append(location.getLongitude());
  44. strBuffer.append("&Time=");
  45. strBuffer.append(timestampFormat.format(greg.getTime()));
  46. strBuffer.append("&Speed=");
  47. strBuffer.append(location.hasSpeed());
  48. doGet(strBuffer.toString());
  49. Log.v(tag, strBuffer.toString());
  50. }
  51. }
  52. }
  53. //將數據通過get的方式發送到服務器,服務器可以根據這個數據進行跟蹤用戶的行走狀態
  54. private void doGet(String string) {
  55. // TODO Auto-generated method stub
  56. //
  57. }
  58. @Override
  59. public void onProviderDisabled(String provider) {
  60. // TODO Auto-generated method stub
  61. }
  62. @Override
  63. public void onProviderEnabled(String provider) {
  64. // TODO Auto-generated method stub
  65. }
  66. @Override
  67. public void onStatusChanged(String provider, int status, Bundle extras)
  68. {
  69. // TODO Auto-generated method stub
  70. GPSCurrentStatus = status;
  71. }
  72. }

Copyright © Linux教程網 All Rights Reserved