From ff27eb8ae3bfb190c709921b0baaef1c0ebaf16b Mon Sep 17 00:00:00 2001 From: Ricky Barrette Date: Tue, 15 May 2012 10:39:00 -0400 Subject: [PATCH] Initial commit of the passive location listener Signed-off-by: Ricky Barrette --- LocationLib/bin/locationlib.jar | Bin 64059 -> 65379 bytes LocationLib/res/layout/base_map_fragment.xml | 2 +- .../android/SkyHook/SkyHookRegistration.java | 3 +- .../android/SkyHook/SkyHookService.java | 6 +- .../com/TwentyCodes/android/debug/Debug.java | 39 ++---------- .../debug/LocationLibraryConstants.java | 56 ++++++++++++++++++ .../android/location/CompassSensor.java | 5 +- .../android/location/LocationService.java | 5 +- .../PassiveLocationChangedReceiver.java | 40 +++++++++++++ .../location/PassiveLocationListener.java | 35 +++++++++++ 10 files changed, 147 insertions(+), 44 deletions(-) create mode 100644 LocationLib/src/com/TwentyCodes/android/debug/LocationLibraryConstants.java create mode 100644 LocationLib/src/com/TwentyCodes/android/location/PassiveLocationChangedReceiver.java create mode 100644 LocationLib/src/com/TwentyCodes/android/location/PassiveLocationListener.java diff --git a/LocationLib/bin/locationlib.jar b/LocationLib/bin/locationlib.jar index 53cfd010ee460823054c43a9caebeac774d37fd5..f886d681a68d90da35088b67042b2a2523785952 100644 GIT binary patch delta 22304 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 OKvK-HfU + android:apiKey="0rKmsWMM0D-LWOndcfwrmW-S0OXlnQl2SJCMeTg" /> -1 ? this.mRequiredAccuracy : Debug.MINIMUM_REQUIRED_ACCURACY) || Debug.REPORT_FIRST_LOCATION) + if(accuracy < (this.mRequiredAccuracy > -1 ? this.mRequiredAccuracy : LocationLibraryConstants.MINIMUM_REQUIRED_ACCURACY) || LocationLibraryConstants.REPORT_FIRST_LOCATION) this.stopSelf(this.mStartID); } diff --git a/LocationLib/src/com/TwentyCodes/android/debug/Debug.java b/LocationLib/src/com/TwentyCodes/android/debug/Debug.java index f3a9979..f4582fa 100644 --- a/LocationLib/src/com/TwentyCodes/android/debug/Debug.java +++ b/LocationLib/src/com/TwentyCodes/android/debug/Debug.java @@ -1,52 +1,21 @@ /** * Debug.java - * @date Mar 1, 2011 + * @date May 15, 2012 * @author ricky barrette * @author Twenty Codes, LLC */ package com.TwentyCodes.android.debug; -import android.hardware.SensorManager; - /** * This class will be used to enable and disable debugging features * @author ricky barrette */ -public final class Debug { - +public class Debug { + /** * Sets the logging level for this library * @author ricky barrette */ public static final boolean DEBUG = false; - - /** - * Sets the default SkyHook Registration Behavior used by SkyHookRegistration.getUserName() - * @author ricky barrette - */ - public static final SkyHookRegistrationBehavior DEFAULT_REGISTRATION_BEHAVIOR = SkyHookRegistrationBehavior.NORMAL; - /** - * Sets the default compass sensor update interval - * @author ricky barrette - */ - public static final int COMPASS_UPDATE_INTERVAL = SensorManager.SENSOR_DELAY_NORMAL; - - /** - * The maximum running time for a single shot location service - * @author ricky barrette - */ - public static final long MAX_LOCATION_SERVICE_RUN_TIME = 60000l; - - /** - * Forces single shot location services to return the first location - * @author ricky barrette - */ - public static final boolean REPORT_FIRST_LOCATION = false; - - /** - * Minimum Required accuracy to report - * @author ricky barrette - */ - public static final int MINIMUM_REQUIRED_ACCURACY = 50; -} \ No newline at end of file +} diff --git a/LocationLib/src/com/TwentyCodes/android/debug/LocationLibraryConstants.java b/LocationLib/src/com/TwentyCodes/android/debug/LocationLibraryConstants.java new file mode 100644 index 0000000..3552e2c --- /dev/null +++ b/LocationLib/src/com/TwentyCodes/android/debug/LocationLibraryConstants.java @@ -0,0 +1,56 @@ +/** + * Debug.java + * @date Mar 1, 2011 + * @author ricky barrette + * @author Twenty Codes, LLC + */ +package com.TwentyCodes.android.debug; + +import android.hardware.SensorManager; + +/** + * This class will be used to set the Location Library Constants + * @author ricky barrette + */ +public final class LocationLibraryConstants { + + /** + * Sets the default SkyHook Registration Behavior used by SkyHookRegistration.getUserName() + * @author ricky barrette + */ + public static final SkyHookRegistrationBehavior DEFAULT_REGISTRATION_BEHAVIOR = SkyHookRegistrationBehavior.NORMAL; + + /** + * Sets the default compass sensor update interval + * @author ricky barrette + */ + public static final int COMPASS_UPDATE_INTERVAL = SensorManager.SENSOR_DELAY_NORMAL; + + /** + * The maximum running time for a single shot location service + * @author ricky barrette + */ + public static final long MAX_LOCATION_SERVICE_RUN_TIME = 60000l; + + /** + * Forces single shot location services to return the first location + * @author ricky barrette + */ + public static final boolean REPORT_FIRST_LOCATION = false; + + /** + * Minimum Required accuracy to report + * @author ricky barrette + */ + public static final int MINIMUM_REQUIRED_ACCURACY = 50; + + public static final boolean SUPPORTS_FROYO; + + public static final boolean SUPPORTS_GINGERBREAD; + + static{ + SUPPORTS_FROYO = android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.FROYO; + + SUPPORTS_GINGERBREAD = android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD; + } +} \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/location/CompassSensor.java b/LocationLib/src/com/TwentyCodes/android/location/CompassSensor.java index 2a8d1ed..8c4fd2c 100644 --- a/LocationLib/src/com/TwentyCodes/android/location/CompassSensor.java +++ b/LocationLib/src/com/TwentyCodes/android/location/CompassSensor.java @@ -21,6 +21,7 @@ import android.view.Surface; import android.view.WindowManager; import com.TwentyCodes.android.debug.Debug; +import com.TwentyCodes.android.debug.LocationLibraryConstants; /** * A simple convince class that accesses the compass sensor on another thread @@ -206,9 +207,9 @@ public class CompassSensor{ @Override public void run() { // Register this class as a listener for the accelerometer sensor - mSensorManager.registerListener(mCallBack, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), Debug.COMPASS_UPDATE_INTERVAL); + mSensorManager.registerListener(mCallBack, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), LocationLibraryConstants.COMPASS_UPDATE_INTERVAL); // ...and the orientation sensor - mSensorManager.registerListener(mCallBack, mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), Debug.COMPASS_UPDATE_INTERVAL); + mSensorManager.registerListener(mCallBack, mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), LocationLibraryConstants.COMPASS_UPDATE_INTERVAL); } }).start(); } diff --git a/LocationLib/src/com/TwentyCodes/android/location/LocationService.java b/LocationLib/src/com/TwentyCodes/android/location/LocationService.java index 43f4304..3ebb8a6 100644 --- a/LocationLib/src/com/TwentyCodes/android/location/LocationService.java +++ b/LocationLib/src/com/TwentyCodes/android/location/LocationService.java @@ -22,6 +22,7 @@ import android.os.PowerManager.WakeLock; import android.util.Log; import com.TwentyCodes.android.debug.Debug; +import com.TwentyCodes.android.debug.LocationLibraryConstants; /** * This service class will be used broadcast the users location either one time, or periodically. @@ -117,7 +118,7 @@ public class LocationService extends Service implements LocationListener { /* * que the fail safe runnable to kill the report location and kill it self after the MAX_RUN_TIME has been meet */ - new Handler().postDelayed(failSafe, Debug.MAX_LOCATION_SERVICE_RUN_TIME); + new Handler().postDelayed(failSafe, LocationLibraryConstants.MAX_LOCATION_SERVICE_RUN_TIME); super.onCreate(); } @@ -229,7 +230,7 @@ public class LocationService extends Service implements LocationListener { if(Debug.DEBUG) Log.d(TAG, "got location +- "+ location.getAccuracy() +"m"); mLocation = location; - if(location.getAccuracy() <= (mRequiredAccuracy > -1 ? mRequiredAccuracy : Debug.MINIMUM_REQUIRED_ACCURACY) || Debug.REPORT_FIRST_LOCATION){ + if(location.getAccuracy() <= (mRequiredAccuracy > -1 ? mRequiredAccuracy : LocationLibraryConstants.MINIMUM_REQUIRED_ACCURACY) || LocationLibraryConstants.REPORT_FIRST_LOCATION){ stopSelf(mStartId); } } diff --git a/LocationLib/src/com/TwentyCodes/android/location/PassiveLocationChangedReceiver.java b/LocationLib/src/com/TwentyCodes/android/location/PassiveLocationChangedReceiver.java new file mode 100644 index 0000000..19f18cb --- /dev/null +++ b/LocationLib/src/com/TwentyCodes/android/location/PassiveLocationChangedReceiver.java @@ -0,0 +1,40 @@ +/** + * PassiveLocationChangedReceiver.java + * @date May 15, 2012 + * @author ricky barrette + * @author Twenty Codes, LLC + */ +package com.TwentyCodes.android.location; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.location.Location; +import android.location.LocationManager; + +/** + * @author ricky barrette + */ +public abstract class PassiveLocationChangedReceiver extends BroadcastReceiver { + + protected Context mContext; + + /** + * (non-Javadoc) + * @see android.content.BroadcastReceiver#onReceive(android.content.Context, android.content.Intent) + */ + @Override + public void onReceive(Context context, Intent intent) { + mContext = context; + final String key = LocationManager.KEY_LOCATION_CHANGED; + if (intent.hasExtra(key)) + onLocationUpdate((Location)intent.getExtras().get(key)); + } + + /** + * called when a location update is received + * @param parcelableExtra + * @author ricky barrette + */ + public abstract void onLocationUpdate(Location location); +} \ No newline at end of file diff --git a/LocationLib/src/com/TwentyCodes/android/location/PassiveLocationListener.java b/LocationLib/src/com/TwentyCodes/android/location/PassiveLocationListener.java new file mode 100644 index 0000000..91311f7 --- /dev/null +++ b/LocationLib/src/com/TwentyCodes/android/location/PassiveLocationListener.java @@ -0,0 +1,35 @@ +/** + * PassiveLocationListener.java + * @date May 15, 2012 + * @author ricky barrette + * @author Twenty Codes, LLC + */ +package com.TwentyCodes.android.location; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.location.LocationManager; + +import com.TwentyCodes.android.debug.LocationLibraryConstants; + +/** + * A convenience class for requesting passive location updates + * @author ricky barrette + */ +public class PassiveLocationListener { + + /** + * A convenience method for requesting passive location updates + * @param context + * @author ricky barrette + */ + public static final void requestPassiveLocationUpdates(final Context context){ + if (LocationLibraryConstants.SUPPORTS_FROYO) { + final LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); + final Intent passiveIntent = new Intent(context, PassiveLocationChangedReceiver.class); + final PendingIntent locationListenerPassivePendingIntent = PendingIntent.getBroadcast(context, 0, passiveIntent, PendingIntent.FLAG_UPDATE_CURRENT); + locationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 0, 0, locationListenerPassivePendingIntent); + } + } +} \ No newline at end of file