Ejemplo n.º 1
0
 public void onLocationChanged(Location location) {
   l = location;
   checkGoodEnough(l.getExtras());
 }
Ejemplo n.º 2
0
    public void onLocationChanged(Location loc) {
      /**
       * Hemos obtenido una nueva localización 1. Comprobar si es una localización válida 1.1. Que
       * no sea null. 1.2. Que tenga precisión suficiente. 2. Si la localización es válida. 2.1.
       * Enviar la localización al servidor OPEN GTS 2.2. Graba la posición en la base de datos.
       * 2.3. Comprobar el número de puntos en la db y si es superior a maxNumRegistrosEnDb entonces
       * hay que exportar los puntos al fichero de texto de la SDcard y luego borrar los registros
       * de la base de datos 3. Actualizar variables de "lastLocation" y los contadores de puntos
       * obtenidos, puntos enviados, puntos rechazados y puntos en la db 4. Enviar los datos a los
       * clientes UI registrados.
       */

      // Para poder obtener la hora

      GregorianCalendar greg = new GregorianCalendar(TimeZone.getTimeZone("Europe/Madrid"));
      DateFormat timestampFormat = new SimpleDateFormat("yyyyMMddHHmmss");
      String fechaHora = timestampFormat.format(greg.getTime());
      // La fecha y hora del sistema en el momento que hemos la posición

      // 1. Comprobar si es una localización válida
      // 1.1. Que no sea null.
      if (loc != null) {
        boolean pointIsRecorded = false;
        int cuantosRegistros;

        try {
          // 1.2. Que tenga precisión suficiente.

          // TODO, determinar si programamos que al estar en modo intensivo
          // la precisión (accuracy) se tenga que comprobar o cualquiera
          // nos vale
          // 1.2.1 Si estamos en modo intensivo, cualquier accuracy nos vale
          // De momento no pedimos que tenga al menos minAccuracyMeters

          // TODO, hay que deja el IF como sigue y quita el if (true)
          // if (loc.hasAccuracy()
          //		&& loc.getAccuracy() <= minAccuracyMeters) {

          // Para hacer debug en el emulador dejamos pasar todos los puntos
          if (true) {
            pointIsRecorded = true;

            // 2. Si la localización es válida.
            // 2.1. Enviar la localización al servidor OPEN GTS
            String url =
                "http://"
                    + getServerName()
                    + getGprmcName()
                    + "acct="
                    + getAccountName()
                    + "&"
                    + "dev="
                    + getDeviceName()
                    + "&"
                    + "gprmc="
                    + OpenGTSutils.GPRMCEncode(loc);

            Log.i(tag, "URL: " + url);

            AsyncHttpClient client = new AsyncHttpClient();
            client.get(
                url,
                new AsyncHttpResponseHandler() {
                  @Override
                  public void onStart() {
                    Log.i(tag, "AsyncHttpClient onStart");
                  }

                  @Override
                  public void onSuccess(String response) {
                    Log.i(tag, "AsyncHttpClient SUCCESS " + response);
                    cntEnviados++;
                  }

                  @Override
                  public void onFailure(Throwable e, String response) {
                    Log.i(tag, "AsyncHttpClient FAILURE " + response);
                  }

                  @Override
                  public void onFinish() {
                    Log.i(tag, "AsyncHttpClient onFinish");
                  }
                });

            // 2.2. Graba la posición en la base de datos.
            DbPointsManager punto =
                new DbPointsManager(
                    timestampFormat.format(loc.getTime()),
                    loc.getLatitude(),
                    loc.getLongitude(),
                    loc.hasAltitude() ? loc.getAltitude() : 0.0,
                    loc.hasAccuracy() ? loc.getAccuracy() : 0.0,
                    loc.hasSpeed() ? loc.getSpeed() : 0.0,
                    loc.hasBearing() ? loc.getBearing() : 0.0,
                    false);
            // TODO, de momento el ultimo campo "puntoEnviado", sera false, hasta que
            // incorporemos un sistema para poder controlar que puntos se han podido enviar
            // y cuales no.

            db.addDbPoint(punto);

            // Saber cuantos registros hay en la base de datos
            cuantosRegistros = db.getDbPointsCount();

            Log.d(tag, "Reg #: " + cuantosRegistros + " Max #: " + maxNumRegistrosEnDb);

            // * 2.3. Comprobar el número de puntos en la db y si es superior a maxNumRegistrosEnDb
            // *      entonces hay que exportar los puntos al fichero de texto de la SDcard y
            // *      luego borrar los registros de la base de datos
            if (cuantosRegistros > maxNumRegistrosEnDb) {
              if (db.doDbExport(deviceName) > 0) {
                // * 2.3.1 Se ha exportado los datos pues ahora borrar el
                // * 	   contenido de la tabla "points" de la base de datos
                int i;
                i = db.deleteDbPointAll();
                Log.d(tag, "Se borraron " + i + "PUNTOS");
              }
            }

            Log.i(tag, "addDbPoint: " + punto.toString());
          }

        } catch (Exception e) {
          Log.e(tag, e.toString());
        } finally {
          // Si estamos aqui algo ha ido mal así que ...
          /* Este código en principio no es necesario
          if (db.isOpen())
          	db.close();
          */
        }

        // Toast
        if (pointIsRecorded) {
          cntObtenidos++;
          /* TODO
          if (showingDebugToast)
          	Toast.makeText(
          			getBaseContext(),
          			"Location stored: \nLat: "
          					+ sevenSigDigits.format(loc
          							.getLatitude())
          					+ " \nLon: "
          					+ sevenSigDigits.format(loc
          							.getLongitude())
          					+ " \nAlt: "
          					+ (loc.hasAltitude() ? loc
          							.getAltitude() + "m" : "?")
          					+ "\nVel: "
          					+ (loc.hasSpeed() ? loc.getSpeed()
          							+ "m" : "?")
          					+ " \nAcc: "
          					+ (loc.hasAccuracy() ? loc
          							.getAccuracy() + "m" : "?"),
          			Toast.LENGTH_LONG).show();
          */
        } else {
          cntRechazados++;
          /* TODO
          if (showingDebugToast)
          	Toast.makeText(
          			getBaseContext(),
          			"Location not accurate enough: \nLat: "
          					+ sevenSigDigits.format(loc
          							.getLatitude())
          					+ " \nLon: "
          					+ sevenSigDigits.format(loc
          							.getLongitude())
          					+ " \nAlt: "
          					+ (loc.hasAltitude() ? loc
          							.getAltitude() + "m" : "?")
          					+ "\nVel: "
          					+ (loc.hasSpeed() ? loc.getSpeed()
          							+ "m" : "?")
          					+ " \nAcc: "
          					+ (loc.hasAccuracy() ? loc
          							.getAccuracy() + "m" : "?"),
          			Toast.LENGTH_LONG).show();
          */
        }
      }

      // 3. Actualizar  variables de "lastLocation" y
      //    los contadores de puntos obtenidos, puntos enviados, puntos rechazados

      // Poner la fecha en YYMMDD HH:MM:SS
      StringBuffer buf = new StringBuffer(timestampFormat.format(loc.getTime()));
      buf.insert(4, '-');
      buf.insert(7, '-');
      buf.insert(10, ' ');
      buf.insert(13, ':');
      buf.insert(16, ':');

      // buf.append('Z');

      setLastDateTime(buf.toString());

      setLastLatitude(String.format("%1.6f", loc.getLatitude()));

      setLastLongitude(String.format("%1.6f", loc.getLongitude()));

      setLastAccuracy((loc.hasAccuracy() ? String.format("%1.0f", loc.getAccuracy()) + "m" : "?"));

      setLastAltitude((loc.hasAltitude() ? String.format("%1.0f", loc.getAltitude()) + "m" : "?"));

      setLastSpeed((loc.hasSpeed() ? String.format("%1.0f", loc.getSpeed()) + "m/s" : "?"));

      setLastSpeed(
          getLastSpeed()
              + " "
              + (loc.hasSpeed() ? String.format("%1.0f", loc.getSpeed() * 3.6) + "km/s" : "?"));

      Bundle extras = loc.getExtras();
      if (extras != null) {
        setLastSatellites(
            extras.containsKey("satellites") ? extras.get("satellites").toString() : "0");
        Log.d(tag, "sat: " + getLastSatellites());
      } else Log.d(tag, "sat: extras es null");

      // Guardar el objeto de la última localización
      setLastLoc(loc);

      // Guardar el número de registros en la base de datos para luego actualizar el UI
      setLastPointCounter(db.getDbPointsCount());

      // 4. Enviar los datos a los clientes UI registrados.
      sendMessageToUI();
    }