package
com.example.testproject
import
android.annotation.SuppressLint
import
android.content.Context
import
android.media.AudioAttributes
import
android.media.AudioFocusRequest
import
android.media.AudioManager
import
android.media.AudioManager.OnAudioFocusChangeListener
import
android.media.MediaPlayer
import
android.os.Build
import
android.os.Bundle
import
androidx.activity.ComponentActivity
import
androidx.activity.compose.setContent
import
androidx.annotation.RequiresApi
import
androidx.compose.foundation.layout.*
import
androidx.compose.material.*
import
androidx.compose.runtime.Composable
import
androidx.compose.ui.Alignment
import
androidx.compose.ui.Modifier
import
androidx.compose.ui.graphics.Color
import
androidx.compose.ui.platform.LocalContext
import
androidx.compose.ui.text.font.FontWeight
import
androidx.compose.ui.text.style.TextAlign
import
androidx.compose.ui.unit.dp
import
androidx.compose.ui.unit.sp
import
com.example.testproject.ui.theme.TestProjectTheme
import
com.example.testproject.ui.theme.greenColor
import
java.io.IOException
class
MainActivity : ComponentActivity() {
var mediaPlayer: MediaPlayer? =
null
var audioManager: AudioManager? =
null
var playbackAttributes: AudioAttributes? =
null
var audioFocusChangeListener =
OnAudioFocusChangeListener { focusChange ->
if
(focusChange == AudioManager.AUDIOFOCUS_GAIN) {
mediaPlayer!!.start()
}
else
if
(focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT) {
mediaPlayer!!.pause()
mediaPlayer!!.seekTo(
0
)
}
else
if
(focusChange == AudioManager.AUDIOFOCUS_LOSS) {
mediaPlayer!!.release()
}
}
@RequiresApi
(Build.VERSION_CODES.O)
@SuppressLint
(
"UnusedMaterialScaffoldPaddingParameter"
)
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
audioManager = getSystemService(AUDIO_SERVICE) as AudioManager
playbackAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build()
val focusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
.setAudioAttributes(playbackAttributes!!)
.setAcceptsDelayedFocusGain(
true
)
.setOnAudioFocusChangeListener(audioFocusChangeListener)
.build()
val audioFocusRequest = audioManager!!.requestAudioFocus(focusRequest)
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.music);
setContent {
TestProjectTheme {
Surface(
modifier = Modifier.fillMaxSize(), color = MaterialTheme.colors.background
) {
Scaffold(
topBar = {
TopAppBar(backgroundColor = greenColor,
title = {
Text(
text =
"GFG"
,
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center,
color = Color.White
)
})
}) {
audioController(LocalContext.current,mediaPlayer,audioFocusRequest)
}
}
}
}
}
}
@Composable
fun audioController(
context: Context,
mediaPlayer: MediaPlayer?,
audioFocusRequest: Int
) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(all =
30
.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
Text(
text =
"Audio Focus Manager in Android"
,
color = greenColor, fontSize =
20
.sp, fontWeight = FontWeight.Bold
)
Spacer(modifier = Modifier.height(
10
.dp))
Button(onClick = {
mediaPlayer!!.stop()
try
{
mediaPlayer.prepare()
}
catch
(e: IOException) {
e.printStackTrace()
}
}, modifier = Modifier.width(
300
.dp)) {
Text(text =
"Stop"
, color = Color.White)
}
Spacer(modifier = Modifier.height(
10
.dp))
Button(onClick = {
mediaPlayer!!.pause()
}, modifier = Modifier.width(
300
.dp)) {
Text(text =
"Pause"
, color = Color.White)
}
Spacer(modifier = Modifier.height(
10
.dp))
Button(onClick = {
if
(audioFocusRequest == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
mediaPlayer!!.start();
}
}, modifier = Modifier.width(
300
.dp)) {
Text(text =
"Play"
, color = Color.White)
}
}
}