diff options
Diffstat (limited to 'tests/LocationTracker')
4 files changed, 72 insertions, 101 deletions
diff --git a/tests/LocationTracker/res/values/strings.xml b/tests/LocationTracker/res/values/strings.xml index ea6bf2d..60a2912 100644 --- a/tests/LocationTracker/res/values/strings.xml +++ b/tests/LocationTracker/res/values/strings.xml @@ -16,15 +16,14 @@ * limitations under the License. */ --> - <resources> <string name="start_service_menu">Start Service</string> <string name="stop_service_menu">Stop Service</string> <string name="settings_menu">Settings</string> <string name="update_preference">Update frequency</string> - <string name="title_mintime_preference">Minimum update time</string> - <string name="summary_mintime_preference">The suggested minimum time interval for location updates, in seconds</string> - <string name="dialog_title_mintime_preference">Minimum update time</string> + <string name="title_update_preference">Update Interval (seconds)</string> + <string name="summary_update_preference">The suggested time interval for location updates, in seconds</string> + <string name="dialog_update_preference">Update Interval (seconds)</string> <string name="title_mindistance_preference">Minimum distance</string> <string name="summary_mindistance_preference">Minimum distance interval for location updates, in meters</string> <string name="dialog_title_mindistance_preference">Minimum distance</string> @@ -45,4 +44,17 @@ <string name="clear_data">Clear data</string> <string name="delete_confirm">All current tracking data will be deleted.</string> <string name="confirm_title">Clear data</string> -</resources> + <string name="title_power_preference">Power Consumption</string> + <string name="summary_power_preference">Select "High" for high accuracy location updates. Select "Low" will avoid high power location work where possible. Select "None" will receive location updates triggered by other applications. </string> + <string name="dialog_power_preference">Power Consumption</string> + <string-array name="powerList"> + <item >High</item> + <item >Low</item> + <item >None</item> + </string-array> + <string-array name="powerValues"> + <item >203</item> + <item >201</item> + <item >200</item> + </string-array> +</resources>
\ No newline at end of file diff --git a/tests/LocationTracker/res/xml/preferences.xml b/tests/LocationTracker/res/xml/preferences.xml index 61d4817..bd7f504 100755 --- a/tests/LocationTracker/res/xml/preferences.xml +++ b/tests/LocationTracker/res/xml/preferences.xml @@ -21,15 +21,16 @@ <PreferenceCategory android:title="@string/update_preference"> <EditTextPreference android:key="mintime_preference" android:defaultValue="0" - android:title="@string/title_mintime_preference" - android:summary="@string/summary_mintime_preference" - android:dialogTitle="@string/dialog_title_mintime_preference" /> + android:title="@string/title_update_preference" + android:summary="@string/summary_update_preference" + android:dialogTitle="@string/dialog_update_preference" /> - <EditTextPreference android:key="mindistance_preference" - android:defaultValue="0" - android:title="@string/title_mindistance_preference" - android:summary="@string/summary_mindistance_preference" - android:dialogTitle="@string/dialog_title_mindistance_preference" /> + <ListPreference android:key="power_preference" + android:title="@string/title_power_preference" + android:summary="@string/summary_power_preference" + android:defaultValue="203" + android:entries="@array/powerList" + android:entryValues="@array/powerValues"/> </PreferenceCategory> diff --git a/tests/LocationTracker/src/com/android/locationtracker/TrackerActivity.java b/tests/LocationTracker/src/com/android/locationtracker/TrackerActivity.java index 4cfdf6c..835e584 100644 --- a/tests/LocationTracker/src/com/android/locationtracker/TrackerActivity.java +++ b/tests/LocationTracker/src/com/android/locationtracker/TrackerActivity.java @@ -16,17 +16,12 @@ package com.android.locationtracker; -import com.android.locationtracker.data.DateUtils; -import com.android.locationtracker.data.TrackerDataHelper; -import com.android.locationtracker.data.TrackerListHelper; - import android.app.AlertDialog; import android.app.ListActivity; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; import android.database.Cursor; -import android.location.LocationManager; import android.os.Bundle; import android.os.Environment; import android.util.Log; @@ -35,6 +30,10 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.widget.Toast; +import com.android.locationtracker.data.DateUtils; +import com.android.locationtracker.data.TrackerDataHelper; +import com.android.locationtracker.data.TrackerListHelper; + import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; @@ -160,12 +159,8 @@ public class TrackerActivity extends ListActivity { private void exportKML() { String exportFileName = getUniqueFileName( - LocationManager.NETWORK_PROVIDER + ".kml"); - exportFile(LocationManager.NETWORK_PROVIDER, exportFileName, - new TrackerDataHelper(this, TrackerDataHelper.KML_FORMATTER)); - exportFileName = getUniqueFileName( - LocationManager.GPS_PROVIDER + ".kml"); - exportFile(LocationManager.GPS_PROVIDER, exportFileName, + "fused" + ".kml"); + exportFile(null, exportFileName, new TrackerDataHelper(this, TrackerDataHelper.KML_FORMATTER)); } diff --git a/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java b/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java index e2332bf..844d13f 100644 --- a/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java +++ b/tests/LocationTracker/src/com/android/locationtracker/TrackerService.java @@ -16,8 +16,6 @@ package com.android.locationtracker; -import com.android.locationtracker.data.TrackerDataHelper; - import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; @@ -28,6 +26,7 @@ import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; +import android.location.LocationRequest; import android.net.ConnectivityManager; import android.net.wifi.ScanResult; import android.net.wifi.WifiManager; @@ -43,10 +42,9 @@ import android.telephony.gsm.GsmCellLocation; import android.util.Log; import android.widget.Toast; -import java.util.ArrayList; -import java.util.HashSet; +import com.android.locationtracker.data.TrackerDataHelper; + import java.util.List; -import java.util.Set; /** * Location Tracking service @@ -56,13 +54,10 @@ import java.util.Set; */ public class TrackerService extends Service { - private List<LocationTrackingListener> mListeners; + private LocationTrackingListener mListener; private static final String LOG_TAG = TrackerActivity.LOG_TAG; - // controls which location providers to track - private Set<String> mTrackedProviders; - private TrackerDataHelper mTrackerData; private TelephonyManager mTelephonyManager; @@ -79,7 +74,7 @@ public class TrackerService extends Service { // preference constants private static final String MIN_TIME_PREF = "mintime_preference"; - private static final String MIN_DIS_PREF = "mindistance_preference"; + private static final String POWER_PREF = "power_preference"; private static final String GPS_PREF = "gps_preference"; private static final String NETWORK_PREF = "network_preference"; private static final String SIGNAL_PREF = "signal_preference"; @@ -103,43 +98,34 @@ public class TrackerService extends Service { * @param startId */ @Override - public void onStart(Intent intent, int startId) { - super.onStart(intent, startId); + public int onStartCommand(Intent intent, int flags, int startId) { mNetworkLocation = null; initLocationListeners(); Toast.makeText(this, "Tracking service started", Toast.LENGTH_SHORT); + return START_STICKY; } private synchronized void initLocationListeners() { mTrackerData = new TrackerDataHelper(this); - LocationManager lm = getLocationManager(); - - mTrackedProviders = getTrackedProviders(); - List<String> locationProviders = lm.getAllProviders(); - mListeners = new ArrayList<LocationTrackingListener>( - locationProviders.size()); + mListener = new LocationTrackingListener(); + LocationManager lm = getLocationManager(); long minUpdateTime = getLocationUpdateTime(); - float minDistance = getLocationMinDistance(); - - for (String providerName : locationProviders) { - if (mTrackedProviders.contains(providerName)) { - Log.d(LOG_TAG, "Adding location listener for provider " + - providerName); - if (doDebugLogging()) { - mTrackerData.writeEntry("init", String.format( - "start listening to %s : %d ms; %f meters", - providerName, minUpdateTime, minDistance)); - } - LocationTrackingListener listener = - new LocationTrackingListener(); - lm.requestLocationUpdates(providerName, minUpdateTime, - minDistance, listener); - mListeners.add(listener); - } + int powerConsumption = getPowerConsumption(); + LocationRequest lr = LocationRequest.create(); + lr.setInterval(minUpdateTime); + lr.setQuality(powerConsumption); + if (doDebugLogging()) { + mTrackerData.writeEntry("init", String.format( + "start listening to location update : %d ms; %d power consumption", + minUpdateTime, powerConsumption)); } + Log.d(LOG_TAG, "Adding location listener"); + lm.requestLocationUpdates(lr, mListener, null); + + mTelephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); if (doDebugLogging()) { @@ -168,30 +154,10 @@ public class TrackerService extends Service { getPreferences().registerOnSharedPreferenceChangeListener(mPrefListener); } - private Set<String> getTrackedProviders() { - Set<String> providerSet = new HashSet<String>(); - - if (trackGPS()) { - providerSet.add(LocationManager.GPS_PROVIDER); - } - if (trackNetwork()) { - providerSet.add(LocationManager.NETWORK_PROVIDER); - } - return providerSet; - } - private SharedPreferences getPreferences() { return PreferenceManager.getDefaultSharedPreferences(this); } - private boolean trackNetwork() { - return getPreferences().getBoolean(NETWORK_PREF, true); - } - - private boolean trackGPS() { - return getPreferences().getBoolean(GPS_PREF, true); - } - private boolean doDebugLogging() { return getPreferences().getBoolean(DEBUG_PREF, false); } @@ -200,17 +166,6 @@ public class TrackerService extends Service { return getPreferences().getBoolean(SIGNAL_PREF, false); } - private float getLocationMinDistance() { - try { - String disString = getPreferences().getString(MIN_DIS_PREF, "0"); - return Float.parseFloat(disString); - } - catch (NumberFormatException e) { - Log.e(LOG_TAG, "Invalid preference for location min distance", e); - } - return 0; - } - private long getLocationUpdateTime() { try { String timeString = getPreferences().getString(MIN_TIME_PREF, "0"); @@ -223,6 +178,15 @@ public class TrackerService extends Service { return 0; } + private int getPowerConsumption(){ + try { + String power = getPreferences().getString(POWER_PREF, "203"); + return Integer.valueOf(power); + } catch (NumberFormatException e) { + Log.e(LOG_TAG, "Invalid preference for power consumption", e); + } + return 203; //high + } /** * Shuts down this service */ @@ -239,19 +203,17 @@ public class TrackerService extends Service { */ protected synchronized void stopListeners() { LocationManager lm = getLocationManager(); - if (mListeners != null) { - for (LocationTrackingListener listener : mListeners) { - lm.removeUpdates(listener); - } - mListeners.clear(); + if (mListener != null) { + lm.removeUpdates(mListener); } - mListeners = null; + + mListener = null; // stop cell state listener if (mTelephonyManager != null) { mTelephonyManager.listen(mPhoneStateListener, 0); - } - + } + // stop network/wifi listener if (mNetwork != null) { unregisterReceiver(mNetwork); @@ -318,7 +280,7 @@ public class TrackerService extends Service { /** * Writes update to tracking file - * + * * @param provider - name of enabled provider */ public void onProviderEnabled(String provider) { @@ -328,8 +290,8 @@ public class TrackerService extends Service { } /** - * Writes update to tracking file - * + * Writes update to tracking file + * * @param provider - name of provider whose status changed * @param status - new status * @param extras - optional set of extra status messages @@ -366,6 +328,7 @@ public class TrackerService extends Service { } } + @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { if (mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) { String updateMsg = "cdma dBM=" + signalStrength.getCdmaDbm(); |