diff --git a/app/src/main/java/org/traccar/client/MainActivity.java b/app/src/main/java/org/traccar/client/MainActivity.java
index 7dc51bd..b2bd54c 100644
--- a/app/src/main/java/org/traccar/client/MainActivity.java
+++ b/app/src/main/java/org/traccar/client/MainActivity.java
@@ -22,6 +22,7 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.location.LocationManager;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
@@ -48,6 +49,12 @@ public class MainActivity extends PreferenceActivity implements OnSharedPreferen
firstLaunch = !PreferenceManager.getDefaultSharedPreferences(this).contains(KEY_PORT);
addPreferencesFromResource(R.xml.preferences);
initPreferences();
+
+ // DELME
+ if (PreferenceManager.getDefaultSharedPreferences(this).getString(KEY_PROVIDER, null).equals("mixed")) {
+ PreferenceManager.getDefaultSharedPreferences(this).edit().putString(KEY_PROVIDER, LocationManager.GPS_PROVIDER).commit();
+ }
+
if (getPreferenceScreen().getSharedPreferences().getBoolean(KEY_STATUS, false)) {
setPreferencesEnabled(false);
startService(new Intent(this, TrackingService.class));
diff --git a/app/src/main/java/org/traccar/client/PositionProvider.java b/app/src/main/java/org/traccar/client/PositionProvider.java
index f5103cb..bb0704b 100644
--- a/app/src/main/java/org/traccar/client/PositionProvider.java
+++ b/app/src/main/java/org/traccar/client/PositionProvider.java
@@ -19,146 +19,80 @@ import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
-import android.location.LocationProvider;
import android.os.BatteryManager;
import android.os.Build;
import android.os.Bundle;
-import android.os.Handler;
+import android.preference.PreferenceManager;
import android.util.Log;
-public class PositionProvider {
+public class PositionProvider implements LocationListener {
private static final String TAG = PositionProvider.class.getSimpleName();
- public static final String PROVIDER_MIXED = "mixed";
- public static final long PROVIDER_RETRY_PERIOD = 60 * 1000;
-
public interface PositionListener {
void onPositionUpdate(Position position);
}
-
- private final Handler handler;
- private final LocationManager locationManager;
- private final long period;
+
private final PositionListener listener;
+
private final Context context;
+ private final SharedPreferences preferences;
+ private final LocationManager locationManager;
+
private String deviceId;
+ private String type;
+ private final long period;
- private boolean useFine;
- private boolean useCoarse;
-
- public PositionProvider(Context context, PositionListener listener, String deviceId, String type, long period) {
- handler = new Handler(context.getMainLooper());
- locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
- this.period = period;
- this.listener = listener;
+ public PositionProvider(Context context, PositionListener listener) {
this.context = context;
- this.deviceId = deviceId;
+ this.listener = listener;
- // Determine providers
- if (type.equals(PROVIDER_MIXED)) {
- useFine = true;
- useCoarse = true;
- } else if (type.equals(LocationManager.GPS_PROVIDER)) {
- useFine = true;
- } else if (type.equals(LocationManager.NETWORK_PROVIDER)) {
- useCoarse = true;
- }
+ preferences = PreferenceManager.getDefaultSharedPreferences(context);
+ locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
+
+ deviceId = preferences.getString(MainActivity.KEY_DEVICE, null);
+ type = preferences.getString(MainActivity.KEY_PROVIDER, null);
+ period = Integer.parseInt(preferences.getString(MainActivity.KEY_INTERVAL, null)) * 1000;
}
public void startUpdates() {
- if (useFine) {
- try {
- locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, period, 0, fineLocationListener);
- } catch (Exception e) {
- StatusActivity.addMessage(context.getString(R.string.status_provider_missing));
- }
- }
- if (useCoarse) {
- try {
- locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, period, 0, coarseLocationListener);
- } catch (Exception e) {
- StatusActivity.addMessage(context.getString(R.string.status_provider_missing));
- }
- }
- handler.postDelayed(updateTask, period);
+ locationManager.requestLocationUpdates(type, period, 0, this);
}
public void stopUpdates() {
- handler.removeCallbacks(updateTask);
- locationManager.removeUpdates(fineLocationListener);
- locationManager.removeUpdates(coarseLocationListener);
+ locationManager.removeUpdates(this);
}
- private final Runnable updateTask = new Runnable() {
+ private long lastTime;
- private long lastTime;
-
- private boolean tryProvider(String provider) {
- Location location = locationManager.getLastKnownLocation(provider);
-
- /*if (location != null) {
- Toast.makeText(context, "phone: " + new Date() + "\ngps: " + new Date(location.getTime()), Toast.LENGTH_LONG).show();
- } else {
- Toast.makeText(context, "no location", Toast.LENGTH_LONG).show();
- }*/
-
- if (location != null && location.getTime() != lastTime) {
- Log.i(TAG, "location new");
- lastTime = location.getTime();
- listener.onPositionUpdate(new Position(deviceId, location, getBatteryLevel()));
- return true;
- } else {
- Log.i(TAG, location != null ? "location old" : "location nil");
- return false;
- }
+ @Override
+ public void onLocationChanged(Location location) {
+ if (location != null && location.getTime() != lastTime) {
+ Log.i(TAG, "location new");
+ lastTime = location.getTime();
+ listener.onPositionUpdate(new Position(deviceId, location, getBatteryLevel()));
+ } else {
+ Log.i(TAG, location != null ? "location old" : "location nil");
}
+ }
- @Override
- public void run() {
- if (useFine && tryProvider(LocationManager.GPS_PROVIDER)) {
- } else if (useCoarse && tryProvider(LocationManager.NETWORK_PROVIDER)) {
- } else {
- listener.onPositionUpdate(null);
- }
- handler.postDelayed(this, period);
- }
+ @Override
+ public void onStatusChanged(String provider, int status, Bundle extras) {
+ Log.i(TAG, "provider status");
+ }
- };
-
- private final InternalLocationListener fineLocationListener = new InternalLocationListener();
- private final InternalLocationListener coarseLocationListener = new InternalLocationListener();
-
- private class InternalLocationListener implements LocationListener {
-
- @Override
- public void onLocationChanged(Location location) {
- }
-
- @Override
- public void onProviderDisabled(String provider) {
- }
-
- @Override
- public void onProviderEnabled(String provider) {
- }
-
- @Override
- public void onStatusChanged(final String provider, int status, Bundle extras) {
- if (status == LocationProvider.TEMPORARILY_UNAVAILABLE || status == LocationProvider.OUT_OF_SERVICE) {
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- locationManager.removeUpdates(InternalLocationListener.this);
- locationManager.requestLocationUpdates(provider, period, 0, InternalLocationListener.this);
- }
- }, PROVIDER_RETRY_PERIOD);
- }
- }
+ @Override
+ public void onProviderEnabled(String provider) {
+ Log.i(TAG, "provider enabled");
+ }
+ @Override
+ public void onProviderDisabled(String provider) {
+ Log.i(TAG, "provider disabled");
}
@TargetApi(Build.VERSION_CODES.ECLAIR)
diff --git a/app/src/main/java/org/traccar/client/TrackingController.java b/app/src/main/java/org/traccar/client/TrackingController.java
index d921391..f38d719 100644
--- a/app/src/main/java/org/traccar/client/TrackingController.java
+++ b/app/src/main/java/org/traccar/client/TrackingController.java
@@ -45,10 +45,7 @@ public class TrackingController implements PositionProvider.PositionListener, Ne
this.context = context;
handler = new Handler();
preferences = PreferenceManager.getDefaultSharedPreferences(context);
- positionProvider = new PositionProvider(context, this,
- preferences.getString(MainActivity.KEY_DEVICE, null),
- preferences.getString(MainActivity.KEY_PROVIDER, null),
- Integer.parseInt(preferences.getString(MainActivity.KEY_INTERVAL, null)) * 1000);
+ positionProvider = new PositionProvider(context, this);
databaseHelper = new DatabaseHelper(context);
networkManager = new NetworkManager(context, this);
isOnline = networkManager.isOnline();
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 618c909..b28de39 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -21,7 +21,6 @@
- GPS
- Mobilní síť
- - Obojí
Stav
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index 11736d1..8989d01 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -21,7 +21,6 @@
- GPS udbyder
- Netværks udbyder
- - Mixet udbyder
Status
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 743fa7c..eb5c546 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -21,7 +21,6 @@
- GPS
- Netzwerk
- - Gemischt
Status
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 86883ca..9f10869 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -21,7 +21,6 @@
- Proveedor GPS
- Proveedor de red
- - Proveedor mixto
Estado
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 1ac5fc0..ff06769 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -21,7 +21,6 @@
- Mode GPS uniquement
- Mode cellulaire uniquement
- - Mode hybride
Etat
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index ce45f43..75900f6 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -21,7 +21,6 @@
- GPS-lokalisering
- Nettverkslokalisering
- - Blandet lokalisering
Status
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index 4f6c307..8167c50 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -21,7 +21,6 @@
- Provedor GPS
- Provedor Rede
- - Provedor Misto
Status
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 6a73007..a06548f 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -21,7 +21,6 @@
- GPS провайдер
- Сетевой провайдер
- - Смешанный провайдер
Состояние
diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml
index 172d406..0e59c67 100644
--- a/app/src/main/res/values-sr/strings.xml
+++ b/app/src/main/res/values-sr/strings.xml
@@ -21,7 +21,6 @@
- GPS provajder
- Provajder Mreže
- - Oba zajedno provajdera
Status
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 93cf48b..c6b6caf 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -21,7 +21,6 @@
- GPS provider
- Network provider
- - Mixed provider
Status
diff --git a/app/src/main/res/values/values.xml b/app/src/main/res/values/values.xml
index 6a7ddb1..892f401 100644
--- a/app/src/main/res/values/values.xml
+++ b/app/src/main/res/values/values.xml
@@ -4,7 +4,6 @@
- gps
- network
- - mixed