This is a simple sound meter Android app created for the Embedded Systems Programming course (Computer Engineering) at the University of Padua.
It uses the internal microphone of the device to measure the sound level in decibels.
The sound level is displayed in a chart and in a text view in "real time", also there is the history of the sound level of the last 5 minutes.
The app is written in Kotlin and uses the MPAndroidChart library to display the chart.
The app is based on Jetpack Compose for showing the UI and it follows material3 guidelines and style as much as possible.
Its targetSdk
is API 31 (Android 12) since my device is running Android 12 (Samsung Galaxy S10) and the minSdk
is API 26.
It implements the dynamic color theming introduced in Android 12 both in icon and in the app's colors.
The app uses a foreground service to keep the microphone active even when the app is in background so that it can keep measuring the sound level.
The dB value presented is not accurate since it is not calibrated with a reference of 0 dB and the MediaRecorder.AudioSource.MIC
does some elaboration to the audio (MediaRecorder.AudioSource.UNPROCESSED
is not used since it is not supported on all the devices); but it is enough to see the difference between a quiet and a loud environment.
Some Google's libraries are used to get the screen height on rotation in order to choose the right screen layout (material3-window-size-class) and for asking and managing the permissions at runtime easily in compose (accompanist-permissions) which relies on the androidx's APIs.
Horizontal layout in light mode:
Vertical layout in dark mode: