uli
04/01/2017, 11:17 PMpackage de.musoft.elch.media
import android.content.Context
import android.media.AudioManager
import android.media.MediaPlayer
import android.os.PowerManager
import de.musoft.elch.app.R
import de.musoft.elch.extensions.powerManager
import de.musoft.elch.extensions.uriForRessource
import kotlinx.coroutines.experimental.android.UI
import kotlinx.coroutines.experimental.launch
import kotlin.coroutines.experimental.suspendCoroutine
/**
* Created by luckas on 15.09.16.
*/
private const val volume = 1.0f
suspend fun MediaPlayer.prepareSuspending(): Unit =
suspendCoroutine<Unit> { cont ->
try {
setOnPreparedListener {
cont.resume(Unit)
}
prepareAsync()
} catch (t: Throwable) {
cont.resumeWithException(t)
}
}
fun ring(context: Context) {
val uri = context.uriForRessource(R.raw.ring)
val mediaPlayer = MediaPlayer()
val pm = context.powerManager
val wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "AlarmHandover")
mediaPlayer.setOnCompletionListener { it.release() }
mediaPlayer.setWakeMode(context, PowerManager.PARTIAL_WAKE_LOCK)
mediaPlayer.setDataSource(context, uri)
mediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM)
mediaPlayer.setVolume(volume, volume)
launch(UI) {
wakeLock.acquire()
try {
mediaPlayer.prepareSuspending()
mediaPlayer.start()
} finally {
wakeLock.release()
}
}
}
Does that make sense to you guys? Do you think I am safe with regards to wakelocks?