As far as I know, there is no way around the SensorManager , but if you need data very rarely, you can start the sensor manually and get its values ββusing the TriggerEventListener , which is a little cleaner than a SensorEventListener .
AlarmManager is usually the best option to start an hourly timer, and it works even if your application is down. AlarmManager sends an Intent class that extends BroadcastReceiver , and that class starts your Service . AlarmManager can be installed anywhere in the application, depending on your implementation.
StepCountService
SensorManager sensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); Sensor stepCounter = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER); sensorManager.requestTriggerSensor(listener, stepCounter); private TriggerEventListener listener = new TriggerEventListener(){ @Override public void onTrigger(TriggerEvent event) {
Mainactivity
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent i = new Intent(context, AlarmReceiver.class); PendingIntent pending = PendingIntent.getBroadcast(context, 0, i, PendingIntent.FLAG_CANCEL_CURRENT); alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME,AlarmManager.INTERVAL_HOUR, AlarmManager.INTERVAL_HOUR, alarmIntent);
Alarmreceiver
public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Intent service = new Intent(context, StepCountService.class); context.startService(service); } }
source share