package org.kost.android.sensorsweblogger; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.hardware.Sensor; import android.hardware.SensorManager; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class HandleSensors { Sensor sensorSingle = null; List<Class<?>> sensorClasses = new ArrayList<Class<?>>(); public HandleSensors (Context context, TextView txtView) { SensorManager sensorManager = null; if (txtView != null) txtView.append("Detecting Sensors\n"); sensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE); List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); for (Sensor sensor : sensors) { if (txtView != null) txtView.append("Sensor: " + sensor.getName() + "\n"); } sensorSingle = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); if (sensorSingle != null) { sensorClasses.add(SensorLight.class); } else { if (txtView != null) txtView.append("No light sensor!\n"); } sensorSingle = sensorManager.getDefaultSensor(Sensor.TYPE_AMBIENT_TEMPERATURE); if (sensorSingle != null) { sensorClasses.add(SensorAmbientTemperature.class); } else { if (txtView != null) txtView.append("No ambient temperature sensor!\n"); } sensorSingle = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE); if (sensorSingle != null) { sensorClasses.add(SensorPressure.class); } else { if (txtView != null) txtView.append("No pressure sensor!\n"); } sensorSingle = sensorManager.getDefaultSensor(Sensor.TYPE_RELATIVE_HUMIDITY); if (sensorSingle != null) { sensorClasses.add(SensorRelativeHumidity.class); } else { if (txtView != null) txtView.append("No relative humidity sensor!\n"); } } public long getInterval (Context context) { // getDefaultSharedPreferences(this); cannot be used since it is private // SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences sharedPrefs = context.getSharedPreferences(context.getPackageName() + "_preferences",Context.MODE_PRIVATE); Integer freqint = Integer.getInteger(sharedPrefs.getString("sync_frequency","15"),15); long interval; switch(freqint) { case 15: interval= AlarmManager.INTERVAL_FIFTEEN_MINUTES; break; case 30: interval=AlarmManager.INTERVAL_HALF_HOUR; break; case 60: interval=AlarmManager.INTERVAL_HOUR; break; case 1440: interval=AlarmManager.INTERVAL_DAY; break; default: interval=AlarmManager.INTERVAL_FIFTEEN_MINUTES; } return(interval); } public void StartServiceHandlers (Context context) { for (Class<?> sensorSingle : sensorClasses) { AlarmManager scheduler = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context.getApplicationContext(), sensorSingle); PendingIntent scheduledIntent = PendingIntent.getService(context.getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); scheduler.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), getInterval(context), scheduledIntent); } } public void StopServiceHandlers (Context context) { for( Class<?> sensorSingle: sensorClasses ) { AlarmManager scheduler = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context.getApplicationContext(), sensorSingle); PendingIntent scheduledIntent = PendingIntent.getService(context.getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); scheduler.cancel(scheduledIntent); context.stopService(intent); } } }