mirror of
https://github.com/aljazceru/Android-nRF-Toolbox.git
synced 2025-12-19 23:44:24 +01:00
Switch AlarmManager to RingtoneManager
This commit is contained in:
@@ -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()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user