DEV Community ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐Ÿ’ป

DEV Community ๐Ÿ‘ฉโ€๐Ÿ’ป๐Ÿ‘จโ€๐Ÿ’ป is a community of 970,177 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

Create account Log in
Cover image for Android Jogging App - Part 3
Ethan
Ethan

Posted on

Android Jogging App - Part 3

Introduction

Hello :) and welcome to part 3 of my jogging application side project.

This time I decided to implement the sensor event listener.


Setting up the sensor event listener

First for logging purposes I added a TAG variable to MainActivity.

private val TAG = "MainActivity"
Enter fullscreen mode Exit fullscreen mode

Once the Activity Recognition permission is granted/not needed I then call the following method:

initializeStepCounterListener()
Enter fullscreen mode Exit fullscreen mode

This method bascially initializes the listener for the step counter:

 private fun initializeStepCounterListener() {
    val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
    val stepCounterSensor = sensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER)

    stepCounterSensor ?: return


    sensorManager.registerListener(this@MainActivity, stepCounterSensor, SensorManager.SENSOR_DELAY_FASTEST,)
}
Enter fullscreen mode Exit fullscreen mode

The above basically gets the manager and the sensor, then if the sensor is not null the listener is registered. Because I want it as close to real time as possible I use "SNSOR_DELAY_FASTEST" to get data as fast as possible.

Next I needed to add the listener to the MainActivity:

class MainActivity : AppCompatActivity(), OnMapReadyCallback, SensorEventListener {
Enter fullscreen mode Exit fullscreen mode

Then I had to implement the events which are "onAccuracyChanged" and "onSensorChanged":

 override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
    Log.d(TAG, "onAccuracyChanged: sensor: $sensor; accuracy: $accuracy")
 }
Enter fullscreen mode Exit fullscreen mode

onAccuracyChanged is called when the accuracy of the registered sensor has changed.
Here I just log the event.

override fun onSensorChanged(event: SensorEvent?) {
    event ?: return

    event.values.firstOrNull()?.let {
        Log.d(TAG, "Steps: $it")
    }
}
Enter fullscreen mode Exit fullscreen mode

onSensorChanged is called when there is a new sensor event.
Here I check if there is actually an event and then loop the values and log the output.


Conclusion

Short and sweet, still a newb when it comes to Kotlin but it's fun learning as I go along.


Things learnt

Kotlin

?: - Checks to make sure the variable is not null

firstOrNull - Returns the first element, or null if the array is empty.


Like me work? I post about a variety of topics, if you would like to see more please like and follow me.
Also I love coffee.

โ€œBuy Me A Coffeeโ€

Top comments (0)

๐ŸŒš Browsing with dark mode makes you a better developer.

It's a scientific fact.