Этот коммит содержится в:
Anton Tananaev
2014-01-11 16:57:35 +13:00
родитель 42aa93342c
Коммит 8bdc5e1a65
15 изменённых файлов: 79 добавлений и 19 удалений
+3
Просмотреть файл
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true" project-jdk-name="1.7" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
+2 -5
Просмотреть файл
@@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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); public void onPositionUpdate(Location location);
} }
private final Context context;
private final Handler handler; private final Handler handler;
private final LocationManager locationManager; private final LocationManager locationManager;
private final long period; private final long period;
@@ -46,8 +44,7 @@ public class PositionProvider {
private boolean useCoarse; private boolean useCoarse;
public PositionProvider(Context context, String type, long period, PositionListener listener) { public PositionProvider(Context context, String type, long period, PositionListener listener) {
this.context = context; handler = new Handler(context.getMainLooper());
handler = new Handler(this.context.getMainLooper());
locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
this.period = period; this.period = period;
this.listener = listener; this.listener = listener;
+24 -11
Просмотреть файл
@@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -49,22 +49,35 @@ public class Protocol {
/** /**
* Format location message * Format location message
*/ */
public static String createLocationMessage(Location l) { public static String createLocationMessage(boolean extended, Location l, double battery) {
StringBuilder s = new StringBuilder("$GPRMC,"); StringBuilder s = new StringBuilder(extended ? "$TRCCR," : "$GPRMC,");
Formatter f = new Formatter(s, Locale.ENGLISH); Formatter f = new Formatter(s, Locale.ENGLISH);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.ENGLISH); Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.ENGLISH);
calendar.setTimeInMillis(l.getTime()); calendar.setTimeInMillis(l.getTime());
f.format("%1$tH%1$tM%1$tS.%1$tL,A,", calendar); if (extended) {
double lat = l.getLatitude(); f.format("%1$tY%1$tm%1$td%1$tH%1$tM%1$tS.%1$tL,A,", calendar);
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("%.6f,%.6f,", l.getLatitude(), l.getLongitude());
f.format("%.2f,%.2f,", speed, l.getBearing()); f.format("%.2f,%.2f,", l.getSpeed() * 1.943844, l.getBearing());
f.format("%1$td%1$tm%1$ty,,", calendar); 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; byte checksum = 0;
for (byte b : s.substring(1).getBytes()) { for (byte b : s.substring(1).getBytes()) {
+2 -1
Просмотреть файл
@@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with 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_PORT = "port";
public static final String KEY_INTERVAL = "interval"; public static final String KEY_INTERVAL = "interval";
public static final String KEY_PROVIDER = "provider"; public static final String KEY_PROVIDER = "provider";
public static final String KEY_EXTENDED = "extended";
public static final String KEY_STATUS = "status"; public static final String KEY_STATUS = "status";
@Override @Override
+20 -2
Просмотреть файл
@@ -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"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -15,12 +15,16 @@
*/ */
package org.traccar.client; package org.traccar.client;
import android.annotation.TargetApi;
import android.app.Service; import android.app.Service;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.location.Location; import android.location.Location;
import android.os.BatteryManager;
import android.os.Build;
import android.os.IBinder; import android.os.IBinder;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.PowerManager.WakeLock; import android.os.PowerManager.WakeLock;
@@ -39,6 +43,7 @@ public class TraccarService extends Service {
private int port; private int port;
private int interval; private int interval;
private String provider; private String provider;
private boolean extended;
private SharedPreferences sharedPreferences; private SharedPreferences sharedPreferences;
private ClientController clientController; private ClientController clientController;
@@ -66,6 +71,7 @@ public class TraccarService extends Service {
provider = sharedPreferences.getString(TraccarActivity.KEY_PROVIDER, null); provider = sharedPreferences.getString(TraccarActivity.KEY_PROVIDER, null);
port = Integer.valueOf(sharedPreferences.getString(TraccarActivity.KEY_PORT, null)); port = Integer.valueOf(sharedPreferences.getString(TraccarActivity.KEY_PORT, null));
interval = Integer.valueOf(sharedPreferences.getString(TraccarActivity.KEY_INTERVAL, null)); interval = Integer.valueOf(sharedPreferences.getString(TraccarActivity.KEY_INTERVAL, null));
extended = sharedPreferences.getBoolean(TraccarActivity.KEY_EXTENDED, false);
} catch (Exception error) { } catch (Exception error) {
Log.w(LOG_TAG, error); Log.w(LOG_TAG, error);
} }
@@ -79,6 +85,7 @@ public class TraccarService extends Service {
sharedPreferences.registerOnSharedPreferenceChangeListener(preferenceChangeListener); sharedPreferences.registerOnSharedPreferenceChangeListener(preferenceChangeListener);
} }
@TargetApi(Build.VERSION_CODES.ECLAIR)
@Override @Override
public int onStartCommand(Intent intent, int flags, int startId) { public int onStartCommand(Intent intent, int flags, int startId) {
onStart(intent, startId); onStart(intent, startId);
@@ -109,13 +116,20 @@ public class TraccarService extends Service {
wakeLock.release(); 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() { private PositionProvider.PositionListener positionListener = new PositionProvider.PositionListener() {
@Override @Override
public void onPositionUpdate(Location location) { public void onPositionUpdate(Location location) {
if (location != null) { if (location != null) {
StatusActivity.addMessage(getString(R.string.status_location_update)); 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 = new PositionProvider(TraccarService.this, provider, interval * 1000, positionListener);
positionProvider.startUpdates(); positionProvider.startUpdates();
} else if (key.equals(TraccarActivity.KEY_EXTENDED)) {
extended = sharedPreferences.getBoolean(TraccarActivity.KEY_EXTENDED, false);
} }
} catch (Exception error) { } catch (Exception error) {
Log.w(LOG_TAG, error); Log.w(LOG_TAG, error);
+2
Просмотреть файл
@@ -16,6 +16,8 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Zastaveno</string> <string name="settings_status_off_summary">Zastaveno</string>
<string name="settings_status_on_summary">Spuštěno</string> <string name="settings_status_on_summary">Spuštěno</string>
<string name="settings_extended_title">Rozšířené formát</string>
<string name="settings_extended_summary">Použijte nový formát zprávy</string>
<string name="settings_provider_title">Poskytovatel zaměření</string> <string name="settings_provider_title">Poskytovatel zaměření</string>
<string name="settings_provider_summary">Zdroj zaměřovacích dat</string> <string name="settings_provider_summary">Zdroj zaměřovacích dat</string>
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
+2
Просмотреть файл
@@ -16,6 +16,8 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Service stoppet</string> <string name="settings_status_off_summary">Service stoppet</string>
<string name="settings_status_on_summary">Service er aktiv</string> <string name="settings_status_on_summary">Service er aktiv</string>
<string name="settings_extended_title">Udvidet format</string>
<string name="settings_extended_summary">Brug ny besked format</string>
<string name="settings_provider_title">Udbyder</string> <string name="settings_provider_title">Udbyder</string>
<string name="settings_provider_summary">Udbyder lokaliseringsdata</string> <string name="settings_provider_summary">Udbyder lokaliseringsdata</string>
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
+2
Просмотреть файл
@@ -16,6 +16,8 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Dienst inaktiv</string> <string name="settings_status_off_summary">Dienst inaktiv</string>
<string name="settings_status_on_summary">Dienst aktiv</string> <string name="settings_status_on_summary">Dienst aktiv</string>
<string name="settings_extended_title">Erweiterte Format</string>
<string name="settings_extended_summary">Verwenden Sie neue Nachrichtenformat</string>
<string name="settings_provider_title">Datenherkunft</string> <string name="settings_provider_title">Datenherkunft</string>
<string name="settings_provider_summary">Quelle der Positionen</string> <string name="settings_provider_summary">Quelle der Positionen</string>
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
+2
Просмотреть файл
@@ -16,6 +16,8 @@
<string name="settings_status_on">Desactivado</string> <string name="settings_status_on">Desactivado</string>
<string name="settings_status_off_summary">Servicio parado</string> <string name="settings_status_off_summary">Servicio parado</string>
<string name="settings_status_on_summary">Servicio activado</string> <string name="settings_status_on_summary">Servicio activado</string>
<string name="settings_extended_title">Formato extendido</string>
<string name="settings_extended_summary">Utilice el nuevo formato de mensaje</string>
<string name="settings_provider_title">Proveedor de localización</string> <string name="settings_provider_title">Proveedor de localización</string>
<string name="settings_provider_summary">Fuente de los datos de localización</string> <string name="settings_provider_summary">Fuente de los datos de localización</string>
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
+2
Просмотреть файл
@@ -16,6 +16,8 @@
<string name="settings_status_on">Arrêter</string> <string name="settings_status_on">Arrêter</string>
<string name="settings_status_off_summary">Arrêté</string> <string name="settings_status_off_summary">Arrêté</string>
<string name="settings_status_on_summary">En marche</string> <string name="settings_status_on_summary">En marche</string>
<string name="settings_extended_title">Format étendu</string>
<string name="settings_extended_summary">Utilisez un nouveau format de message</string>
<string name="settings_provider_title">Source de localisation</string> <string name="settings_provider_title">Source de localisation</string>
<string name="settings_provider_summary">Source utilisée par le système afin d\'obtenir la localisation de l\'appareil</string> <string name="settings_provider_summary">Source utilisée par le système afin d\'obtenir la localisation de l\'appareil</string>
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
+2
Просмотреть файл
@@ -16,6 +16,8 @@
<string name="settings_status_on">Parar</string> <string name="settings_status_on">Parar</string>
<string name="settings_status_off_summary">Serviço Parado</string> <string name="settings_status_off_summary">Serviço Parado</string>
<string name="settings_status_on_summary">Serviço em execução</string> <string name="settings_status_on_summary">Serviço em execução</string>
<string name="settings_extended_title">Formato prolongado</string>
<string name="settings_extended_summary">Use o formato de mensagem nova</string>
<string name="settings_provider_title">Provedor de localização</string> <string name="settings_provider_title">Provedor de localização</string>
<string name="settings_provider_summary">Fonte dos dados de localização</string> <string name="settings_provider_summary">Fonte dos dados de localização</string>
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
+2
Просмотреть файл
@@ -16,6 +16,8 @@
<string name="settings_status_on">Стоп</string> <string name="settings_status_on">Стоп</string>
<string name="settings_status_off_summary">Сервис остановлен</string> <string name="settings_status_off_summary">Сервис остановлен</string>
<string name="settings_status_on_summary">Сервис запущен</string> <string name="settings_status_on_summary">Сервис запущен</string>
<string name="settings_extended_title">Расширенный формат</string>
<string name="settings_extended_summary">Использовать новый формат сообщений</string>
<string name="settings_provider_title">Провайдер местоположения</string> <string name="settings_provider_title">Провайдер местоположения</string>
<string name="settings_provider_summary">Источник данных о местоположении</string> <string name="settings_provider_summary">Источник данных о местоположении</string>
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
+2
Просмотреть файл
@@ -16,6 +16,8 @@
<string name="settings_status_on">Stop</string> <string name="settings_status_on">Stop</string>
<string name="settings_status_off_summary">Service stopped</string> <string name="settings_status_off_summary">Service stopped</string>
<string name="settings_status_on_summary">Service running</string> <string name="settings_status_on_summary">Service running</string>
<string name="settings_extended_title">Extended format</string>
<string name="settings_extended_summary">Use new message format</string>
<string name="settings_provider_title">Location provider</string> <string name="settings_provider_title">Location provider</string>
<string name="settings_provider_summary">Source of location data</string> <string name="settings_provider_summary">Source of location data</string>
<string-array name="settings_provider_names"> <string-array name="settings_provider_names">
+6
Просмотреть файл
@@ -33,6 +33,12 @@
android:summary="@string/settings_provider_summary" android:summary="@string/settings_provider_summary"
android:title="@string/settings_provider_title" /> android:title="@string/settings_provider_title" />
<CheckBoxPreference
android:defaultValue="false"
android:key="extended"
android:summary="@string/settings_extended_summary"
android:title="@string/settings_extended_title" />
<SwitchPreference <SwitchPreference
android:defaultValue="false" android:defaultValue="false"
android:key="status" android:key="status"
+6
Просмотреть файл
@@ -33,6 +33,12 @@
android:summary="@string/settings_provider_summary" android:summary="@string/settings_provider_summary"
android:title="@string/settings_provider_title" /> android:title="@string/settings_provider_title" />
<CheckBoxPreference
android:defaultValue="false"
android:key="extended"
android:summary="@string/settings_extended_summary"
android:title="@string/settings_extended_title" />
<CheckBoxPreference <CheckBoxPreference
android:defaultValue="false" android:defaultValue="false"
android:key="status" android:key="status"