Android Open Source - airprobe Gps Tracking Service






From Project

Back to project page airprobe.

License

The source code is released under:

GNU General Public License

If you think the Android project airprobe listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * AirProbe//w w  w  .  j av  a  2s.  c  o m
 * Air quality application for Android, developed as part of 
 * EveryAware project (<http://www.everyaware.eu>).
 *
 * Copyright (C) 2014 CSP Innovazione nelle ICT. All rights reserved.
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 * 
 * For any inquiry please write to <devel@csp.it>
 * 
 * CONTRIBUTORS
 * 
 * This program was made with the contribution of:
 *   Fabio Saracino <fabio.saracino@csp.it>
 *   Patrick Facco <patrick.facco@csp.it>
 * 
 * 
 * SOURCE CODE
 * 
 *  The source code of this program is available at
 *  <https://github.com/CSPICT/airprobe>
 */

package org.csp.everyaware.gps;

import org.csp.everyaware.Constants;
import org.csp.everyaware.Utils;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.location.LocationProvider;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;

/**************************** SMARTPHONE GPS TRACKING SERVICE ****************************************/

public class GpsTrackingService extends Service
{
  private Handler mHandler;
  private boolean bugged;
  
  //access to geolocalization services
  private LocationManager mLocManager;

  //first invoked method
  @Override
  public void onCreate() 
  {
    super.onCreate();
    mHandler = new Handler();
  }
  
  //second invoked method
  @Override
  public int onStartCommand(Intent intent, int flags, int startId) 
  {  
    //LISTENER
    mLocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
  
      mLocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 
          0, locationListener); 
      
      //if network provider is enabled IN ADDITION to sensor box/phone gps provider, register
      //listener for it
      try
      {
        if(Utils.getUseNetworkProviderIndex(getApplicationContext()) == 0)
          mLocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
      }
      catch(IllegalArgumentException e)
      {
        bugged = true;
        e.printStackTrace();
      }
      finally
      {
        if(bugged)
          Log.d("GpsTrackingService", "onStartCommand()--> CAN'T ENABLE NETWORK_PROVIDER: bugged Android!!!");
      }

      Utils.setGpsTrackingOn(true, getApplicationContext());
      
      mHandler.postDelayed(checkTrackingOnRunnable, 2000);
      
    return super.onStartCommand(intent, flags, startId);
  }
  
  //third invoked method
  public void onStart(Intent intent, int startId) 
  {
     super.onStart(intent, startId);
  }
  
  //stop the service
  @Override
  public void onDestroy() 
  {
    if(Utils.getGpsTrackingOn(getApplicationContext()))
    {
      mLocManager.removeUpdates(locationListener);
      Log.d("GpsTrackingService", "onDestroy()--> UNREGISTER LISTENER");      
    }
    super.onDestroy();    
  }
  
  @Override
  public IBinder onBind(Intent arg0) 
  {
    return null;
  }
  
  //verifica se la variabile Constants.GpsData.gpsTrackingOn ? stata messa a false, in tal caso
  //deregistra il location listener
  private Runnable checkTrackingOnRunnable = new Runnable()
  {
    @Override
    public void run() 
    {      
      if(!Utils.getGpsTrackingOn(getApplicationContext()))
      {
        mLocManager.removeUpdates(locationListener);
        Log.d("GpsTrackingService", "onDestroy()--> UNREGISTER LISTENER");
      }
      else
        mHandler.postDelayed(checkTrackingOnRunnable, 2000);
    }    
  };
    
    /************************** LOCATION LISTENERS ******************************************/
    
    //consente la ricezione di notifiche dal LocationManager.
    public final LocationListener locationListener = new LocationListener()
    {
    //invocato quando la location varia
    @Override
    public void onLocationChanged(Location location) 
    {    
      
          //String lat = String.valueOf(location.getLatitude());
          //String lon = String.valueOf(location.getLongitude());
          /*
          Log.d("LocationListener", "::onLocationChanged()--> lat: " +lat+ ", lon: " +lon);
          Log.d("LocationListener", "::onLocationChanged()--> altitude: " +location.getAltitude());
          Log.d("LocationListener", "::onLocationChanged()--> provider: " +location.getProvider());
          Log.d("LocationListener", "::onLocationChanged()--> time: " +location.getTime());
          Log.d("LocationListener", "::onLocationChanged()--> accuracy (meters): " +location.getAccuracy());
          Log.d("LocationListener", "**********************************************************************************");   
            */
          //save location from phone gps provider
          if(location.getProvider().equals(LocationManager.GPS_PROVIDER))
          {
            Utils.lastPhoneLocation = location;
            Utils.lastPhoneLocation.setTime(System.currentTimeMillis());
              //send msg to UI thread for gps fix received
              sendBroadcast(new Intent(Constants.PHONE_GPS_ON));
          }
          //save location from network gps provider
          else if(location.getProvider().equals(LocationManager.NETWORK_PROVIDER))
          {
            Utils.lastNetworkLocation = location;
            Utils.lastNetworkLocation.setTime(System.currentTimeMillis());
                 //send msg to UI thread for network gps fix received
              sendBroadcast(new Intent(Constants.NETWORK_GPS_ON));
          }  
    
          mHandler.postDelayed(mSendPhoneGpsOffMsgRunnable, 750);
    }

    @Override
    public void onProviderDisabled(String provider) 
    {
      Log.d("gpsLocationListener", "GPS Provider disabled");  
    }

    @Override
    public void onProviderEnabled(String provider) 
    {
      Log.d("gpsLocationListener", "GPS Provider enabled");
    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) 
    {
      switch (status) 
      {
        case LocationProvider.OUT_OF_SERVICE:
          Log.d("gpsLocationListener", "Status Changed: Out of Service");
        break;
        case LocationProvider.TEMPORARILY_UNAVAILABLE:
          Log.d("gpsLocationListener", "Status Changed: Temporarily Unavailable");
        break;
        case LocationProvider.AVAILABLE:
          Log.d("gpsLocationListener", "Status Changed: Available");
        break;
      }      
    }  
    };
    
    private Runnable mSendPhoneGpsOffMsgRunnable = new Runnable()
    {
    @Override
    public void run() 
    {
      sendBroadcast(new Intent(Constants.PHONE_GPS_OFF));
    }
      
    };
}




Java Source Code List

android.UnusedStub.java
org.csp.everyaware.ColorHelper.java
org.csp.everyaware.Constants.java
org.csp.everyaware.Credits.java
org.csp.everyaware.ExtendedLatLng.java
org.csp.everyaware.Installation.java
org.csp.everyaware.KmlParser.java
org.csp.everyaware.ManageAccount.java
org.csp.everyaware.Options.java
org.csp.everyaware.Start.java
org.csp.everyaware.Utils.java
org.csp.everyaware.bluetooth.BluetoothBroadcastReceiver.java
org.csp.everyaware.bluetooth.BluetoothHistoryManager.java
org.csp.everyaware.bluetooth.BluetoothManager.java
org.csp.everyaware.bluetooth.BluetoothObject.java
org.csp.everyaware.db.AnnotatedRecord.java
org.csp.everyaware.db.DbManager.java
org.csp.everyaware.db.MapCluster.java
org.csp.everyaware.db.MarkerRecord.java
org.csp.everyaware.db.Record.java
org.csp.everyaware.db.SemanticSessionDetails.java
org.csp.everyaware.db.Track.java
org.csp.everyaware.facebooksdk.AsyncFacebookRunner.java
org.csp.everyaware.facebooksdk.DialogError.java
org.csp.everyaware.facebooksdk.FacebookError.java
org.csp.everyaware.facebooksdk.Facebook.java
org.csp.everyaware.facebooksdk.FbDialog.java
org.csp.everyaware.facebooksdk.Util.java
org.csp.everyaware.fragments.FragmentWizardStep0.java
org.csp.everyaware.fragments.FragmentWizardStep1.java
org.csp.everyaware.fragments.FragmentWizardStep2.java
org.csp.everyaware.gps.GpsTrackingService.java
org.csp.everyaware.internet.FacebookManager.java
org.csp.everyaware.internet.StoreAndForwardService.java
org.csp.everyaware.internet.TwitterLogin.java
org.csp.everyaware.internet.TwitterManager.java
org.csp.everyaware.offline.Graph.java
org.csp.everyaware.offline.Map.java
org.csp.everyaware.offline.MyTracks.java
org.csp.everyaware.offline.Tabs.java
org.csp.everyaware.tabactivities.Graph.java
org.csp.everyaware.tabactivities.Map.java
org.csp.everyaware.tabactivities.Monitor.java
org.csp.everyaware.tabactivities.Tabs.java