From 8bdc5e1a65524567bbc6c5c85319ca5611128247 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 11 Jan 2014 16:57:35 +1300 Subject: [PATCH] Add new message format (fix #63) --- .idea/misc.xml | 3 ++ .../org/traccar/client/PositionProvider.java | 7 ++-- .../java/org/traccar/client/Protocol.java | 35 +++++++++++++------ .../org/traccar/client/TraccarActivity.java | 3 +- .../org/traccar/client/TraccarService.java | 22 ++++++++++-- .../src/main/res/values-cs/strings.xml | 2 ++ .../src/main/res/values-da/strings.xml | 2 ++ .../src/main/res/values-de/strings.xml | 2 ++ .../src/main/res/values-es/strings.xml | 2 ++ .../src/main/res/values-fr/strings.xml | 2 ++ .../src/main/res/values-pt/strings.xml | 2 ++ .../src/main/res/values-ru/strings.xml | 2 ++ .../src/main/res/values/strings.xml | 2 ++ .../src/main/res/xml-v14/preferences.xml | 6 ++++ .../src/main/res/xml/preferences.xml | 6 ++++ 15 files changed, 79 insertions(+), 19 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index 4a8d00b..8d0c7fa 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,8 @@ + + + diff --git a/traccar-client/src/main/java/org/traccar/client/PositionProvider.java b/traccar-client/src/main/java/org/traccar/client/PositionProvider.java index ce6b18e..9d0aa37 100644 --- a/traccar-client/src/main/java/org/traccar/client/PositionProvider.java +++ b/traccar-client/src/main/java/org/traccar/client/PositionProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2014 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,8 +35,6 @@ public class PositionProvider { public void onPositionUpdate(Location location); } - private final Context context; - private final Handler handler; private final LocationManager locationManager; private final long period; @@ -46,8 +44,7 @@ public class PositionProvider { private boolean useCoarse; public PositionProvider(Context context, String type, long period, PositionListener listener) { - this.context = context; - handler = new Handler(this.context.getMainLooper()); + handler = new Handler(context.getMainLooper()); locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); this.period = period; this.listener = listener; diff --git a/traccar-client/src/main/java/org/traccar/client/Protocol.java b/traccar-client/src/main/java/org/traccar/client/Protocol.java index 6fc3f66..1bc855b 100644 --- a/traccar-client/src/main/java/org/traccar/client/Protocol.java +++ b/traccar-client/src/main/java/org/traccar/client/Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2014 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -49,22 +49,35 @@ public class Protocol { /** * Format location message */ - public static String createLocationMessage(Location l) { - StringBuilder s = new StringBuilder("$GPRMC,"); + public static String createLocationMessage(boolean extended, Location l, double battery) { + StringBuilder s = new StringBuilder(extended ? "$TRCCR," : "$GPRMC,"); Formatter f = new Formatter(s, Locale.ENGLISH); Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.ENGLISH); calendar.setTimeInMillis(l.getTime()); - f.format("%1$tH%1$tM%1$tS.%1$tL,A,", calendar); + if (extended) { - double lat = l.getLatitude(); - double lon = l.getLongitude(); - f.format("%02d%07.4f,%c,", (int) Math.abs(lat), Math.abs(lat) % 1 * 60, lat < 0 ? 'S' : 'N' ); - f.format("%03d%07.4f,%c,", (int) Math.abs(lon), Math.abs(lon) % 1 * 60, lon < 0 ? 'W' : 'E' ); + f.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS.%1$tL,A,", calendar); - double speed = l.getSpeed() * 1.943844; // speed in knots - f.format("%.2f,%.2f,", speed, l.getBearing()); - f.format("%1$td%1$tm%1$ty,,", calendar); + f.format("%.6f,%.6f,", l.getLatitude(), l.getLongitude()); + f.format("%.2f,%.2f,", l.getSpeed() * 1.943844, l.getBearing()); + f.format("%.2f,", l.getAltitude()); + f.format("%.0f,", battery); + + } else { + + f.format("%1$tH%1$tM%1$tS.%1$tL,A,", calendar); + + double lat = l.getLatitude(); + double lon = l.getLongitude(); + f.format("%02d%07.4f,%c,", (int) Math.abs(lat), Math.abs(lat) % 1 * 60, lat < 0 ? 'S' : 'N'); + f.format("%03d%07.4f,%c,", (int) Math.abs(lon), Math.abs(lon) % 1 * 60, lon < 0 ? 'W' : 'E'); + + double speed = l.getSpeed() * 1.943844; // speed in knots + f.format("%.2f,%.2f,", speed, l.getBearing()); + f.format("%1$td%1$tm%1$ty,,", calendar); + + } byte checksum = 0; for (byte b : s.substring(1).getBytes()) { diff --git a/traccar-client/src/main/java/org/traccar/client/TraccarActivity.java b/traccar-client/src/main/java/org/traccar/client/TraccarActivity.java index ab06a6c..a245ca0 100644 --- a/traccar-client/src/main/java/org/traccar/client/TraccarActivity.java +++ b/traccar-client/src/main/java/org/traccar/client/TraccarActivity.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2014 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -42,6 +42,7 @@ public class TraccarActivity extends PreferenceActivity { public static final String KEY_PORT = "port"; public static final String KEY_INTERVAL = "interval"; public static final String KEY_PROVIDER = "provider"; + public static final String KEY_EXTENDED = "extended"; public static final String KEY_STATUS = "status"; @Override diff --git a/traccar-client/src/main/java/org/traccar/client/TraccarService.java b/traccar-client/src/main/java/org/traccar/client/TraccarService.java index 8bb8327..28ffd44 100644 --- a/traccar-client/src/main/java/org/traccar/client/TraccarService.java +++ b/traccar-client/src/main/java/org/traccar/client/TraccarService.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2014 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,12 +15,16 @@ */ package org.traccar.client; +import android.annotation.TargetApi; import android.app.Service; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.location.Location; +import android.os.BatteryManager; +import android.os.Build; import android.os.IBinder; import android.os.PowerManager; import android.os.PowerManager.WakeLock; @@ -39,6 +43,7 @@ public class TraccarService extends Service { private int port; private int interval; private String provider; + private boolean extended; private SharedPreferences sharedPreferences; private ClientController clientController; @@ -66,6 +71,7 @@ public class TraccarService extends Service { provider = sharedPreferences.getString(TraccarActivity.KEY_PROVIDER, null); port = Integer.valueOf(sharedPreferences.getString(TraccarActivity.KEY_PORT, null)); interval = Integer.valueOf(sharedPreferences.getString(TraccarActivity.KEY_INTERVAL, null)); + extended = sharedPreferences.getBoolean(TraccarActivity.KEY_EXTENDED, false); } catch (Exception error) { Log.w(LOG_TAG, error); } @@ -79,6 +85,7 @@ public class TraccarService extends Service { sharedPreferences.registerOnSharedPreferenceChangeListener(preferenceChangeListener); } + @TargetApi(Build.VERSION_CODES.ECLAIR) @Override public int onStartCommand(Intent intent, int flags, int startId) { onStart(intent, startId); @@ -109,13 +116,20 @@ public class TraccarService extends Service { wakeLock.release(); } + public double getBatteryLevel() { + Intent batteryIntent = registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0); + int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, 1); + return (level * 100.0) / scale; + } + private PositionProvider.PositionListener positionListener = new PositionProvider.PositionListener() { @Override public void onPositionUpdate(Location location) { if (location != null) { StatusActivity.addMessage(getString(R.string.status_location_update)); - clientController.setNewLocation(Protocol.createLocationMessage(location)); + clientController.setNewLocation(Protocol.createLocationMessage(extended, location, getBatteryLevel())); } } @@ -156,6 +170,10 @@ public class TraccarService extends Service { positionProvider = new PositionProvider(TraccarService.this, provider, interval * 1000, positionListener); positionProvider.startUpdates(); + } else if (key.equals(TraccarActivity.KEY_EXTENDED)) { + + extended = sharedPreferences.getBoolean(TraccarActivity.KEY_EXTENDED, false); + } } catch (Exception error) { Log.w(LOG_TAG, error); diff --git a/traccar-client/src/main/res/values-cs/strings.xml b/traccar-client/src/main/res/values-cs/strings.xml index 02b3f8c..e73544f 100644 --- a/traccar-client/src/main/res/values-cs/strings.xml +++ b/traccar-client/src/main/res/values-cs/strings.xml @@ -16,6 +16,8 @@ Stop Zastaveno Spuštěno + Rozšířené formát + Použijte nový formát zprávy Poskytovatel zaměření Zdroj zaměřovacích dat diff --git a/traccar-client/src/main/res/values-da/strings.xml b/traccar-client/src/main/res/values-da/strings.xml index 854f244..d6067fd 100644 --- a/traccar-client/src/main/res/values-da/strings.xml +++ b/traccar-client/src/main/res/values-da/strings.xml @@ -16,6 +16,8 @@ Stop Service stoppet Service er aktiv + Udvidet format + Brug ny besked format Udbyder Udbyder lokaliseringsdata diff --git a/traccar-client/src/main/res/values-de/strings.xml b/traccar-client/src/main/res/values-de/strings.xml index 730d2a7..3b30798 100644 --- a/traccar-client/src/main/res/values-de/strings.xml +++ b/traccar-client/src/main/res/values-de/strings.xml @@ -16,6 +16,8 @@ Stop Dienst inaktiv Dienst aktiv + Erweiterte Format + Verwenden Sie neue Nachrichtenformat Datenherkunft Quelle der Positionen diff --git a/traccar-client/src/main/res/values-es/strings.xml b/traccar-client/src/main/res/values-es/strings.xml index daf93fe..e73217f 100644 --- a/traccar-client/src/main/res/values-es/strings.xml +++ b/traccar-client/src/main/res/values-es/strings.xml @@ -16,6 +16,8 @@ Desactivado Servicio parado Servicio activado + Formato extendido + Utilice el nuevo formato de mensaje Proveedor de localización Fuente de los datos de localización diff --git a/traccar-client/src/main/res/values-fr/strings.xml b/traccar-client/src/main/res/values-fr/strings.xml index 1e092ee..d44937d 100644 --- a/traccar-client/src/main/res/values-fr/strings.xml +++ b/traccar-client/src/main/res/values-fr/strings.xml @@ -16,6 +16,8 @@ Arrêter Arrêté En marche + Format étendu + Utilisez un nouveau format de message Source de localisation Source utilisée par le système afin d\'obtenir la localisation de l\'appareil diff --git a/traccar-client/src/main/res/values-pt/strings.xml b/traccar-client/src/main/res/values-pt/strings.xml index a68806c..80be197 100644 --- a/traccar-client/src/main/res/values-pt/strings.xml +++ b/traccar-client/src/main/res/values-pt/strings.xml @@ -16,6 +16,8 @@ Parar Serviço Parado Serviço em execução + Formato prolongado + Use o formato de mensagem nova Provedor de localização Fonte dos dados de localização diff --git a/traccar-client/src/main/res/values-ru/strings.xml b/traccar-client/src/main/res/values-ru/strings.xml index 52bd207..d8ff978 100644 --- a/traccar-client/src/main/res/values-ru/strings.xml +++ b/traccar-client/src/main/res/values-ru/strings.xml @@ -16,6 +16,8 @@ Стоп Сервис остановлен Сервис запущен + Расширенный формат + Использовать новый формат сообщений Провайдер местоположения Источник данных о местоположении diff --git a/traccar-client/src/main/res/values/strings.xml b/traccar-client/src/main/res/values/strings.xml index 0b026c9..15d268c 100644 --- a/traccar-client/src/main/res/values/strings.xml +++ b/traccar-client/src/main/res/values/strings.xml @@ -16,6 +16,8 @@ Stop Service stopped Service running + Extended format + Use new message format Location provider Source of location data diff --git a/traccar-client/src/main/res/xml-v14/preferences.xml b/traccar-client/src/main/res/xml-v14/preferences.xml index b9e3259..7b0c27e 100644 --- a/traccar-client/src/main/res/xml-v14/preferences.xml +++ b/traccar-client/src/main/res/xml-v14/preferences.xml @@ -33,6 +33,12 @@ android:summary="@string/settings_provider_summary" android:title="@string/settings_provider_title" /> + + + +