Switch AlarmManager to RingtoneManager

This commit is contained in:
Sylwester Zieliński
2022-05-03 10:27:53 +02:00
parent df9fc40921
commit 19a3d5803e
2 changed files with 11 additions and 55 deletions

View File

@@ -1,15 +1,10 @@
package no.nordicsemi.android.prx.repository package no.nordicsemi.android.prx.repository
import android.content.Context import android.content.Context
import android.media.AudioManager
import android.media.MediaPlayer
import android.media.RingtoneManager import android.media.RingtoneManager
import android.util.Log import android.os.Build
import androidx.lifecycle.LifecycleService
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import no.nordicsemi.android.prx.data.AlarmLevel import no.nordicsemi.android.prx.data.AlarmLevel
import java.io.IOException
import java.lang.Exception
import javax.inject.Inject import javax.inject.Inject
internal class AlarmHandler @Inject constructor( internal class AlarmHandler @Inject constructor(
@@ -17,61 +12,23 @@ internal class AlarmHandler @Inject constructor(
private val context: Context private val context: Context
) { ) {
private val TAG = "ALARM_MANAGER" private val ringtone = RingtoneManager.getRingtone(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE))
private var mediaPlayer = MediaPlayer()
private var volume = 0
init {
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM)
mediaPlayer.isLooping = true
mediaPlayer.setVolume(1.0f, 1.0f)
try {
mediaPlayer.setDataSource(
context,
RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)
)
} catch (e: IOException) {
Log.e(TAG, "Initialize Alarm failed: ", e)
}
}
fun playAlarm(alarmLevel: AlarmLevel) { fun playAlarm(alarmLevel: AlarmLevel) {
val am = context.getSystemService(LifecycleService.AUDIO_SERVICE) as AudioManager if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
ringtone.volume = when (alarmLevel) {
volume = when (alarmLevel) { AlarmLevel.NONE -> 0f
AlarmLevel.NONE -> 0 AlarmLevel.MEDIUM -> 0.5f
AlarmLevel.MEDIUM -> am.getStreamVolume(AudioManager.STREAM_NOTIFICATION) AlarmLevel.HIGH -> 1f
AlarmLevel.HIGH -> am.getStreamVolume(AudioManager.STREAM_ALARM) }
} }
am.setStreamVolume( ringtone.play()
AudioManager.STREAM_ALARM,
volume,
AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE
)
try {
mediaPlayer.prepare()
mediaPlayer.start()
} catch (e: Exception) {
Log.e(TAG, "Prepare Alarm failed: ", e)
}
} }
fun pauseAlarm() { fun pauseAlarm() {
try { if (ringtone.isPlaying) {
if (mediaPlayer.isPlaying) { ringtone.stop()
mediaPlayer.stop()
// Restore original volume
val am = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
am.setStreamVolume(AudioManager.STREAM_ALARM, volume, 0)
}
} catch (e: Exception) {
Log.e(TAG, "Prepare Alarm failed: ", e)
} }
} }
fun releaseAlarm() {
mediaPlayer.release()
}
} }

View File

@@ -84,7 +84,6 @@ class PRXRepository @Inject internal constructor(
} }
fun release() { fun release() {
alarmHandler.releaseAlarm()
manager?.disconnect()?.enqueue() manager?.disconnect()?.enqueue()
manager = null manager = null
logger = null logger = null