歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

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

GPRSServiceListener的實現:

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

Copyright © Linux教程網 All Rights Reserved