如何在Android Studio(Kotlin)中的流连接之前放置音频



我是编程新手,我正在为广播制作一个基本的应用程序,当你按下按钮时,会听到介绍音频,然后会出现第二个音频,直到建立在线广播的网络连接。

当我点击时,我已经设法使介绍音频听起来完整,然后在在线广播播放之前会产生静音,但我不知道如何在广播播放之前放入第二个检测充电状态的音频。这是我的代码:

fun MediaPlayerRadio(){
mediaPlayer = MediaPlayer.create(
this@MainActivity,
Uri.parse("https://radiolink.com")
)
mediaPlayer?.start()
}
........................................................................
fun MediaPlayerIntroSound(){
mediaPlayer = MediaPlayer.create(this, R.raw.SoundIntro)
mediaPlayer?.start()
}
........................................................................

fun click_Button_Radio(){
btn.setOnClickListener(){
if (btn.isSelected){
btn.isSelected = false
mediaPlayer?.stop()
}else{
btn.isSelected = !btn.isSelected
MediaPlayerIntroSound()
mediaPlayer!!.setOnCompletionListener(object : MediaPlayer.OnCompletionListener {
override fun onCompletion(mp: MediaPlayer?) {
MediaPlayerRadio()
}
})
}
}
}

我希望你能支持我。

为此,您必须使用两个媒体播放器,一个用于介绍声音,另一个用于实际声音。

当实际的声音媒体播放器准备就绪时,您可以在介绍声音媒体播放器上播放不同的音频。

要在其他播放器准备好后停止介绍音频播放器,您可以使用视图模型。

//Play Media player
mediaPlayer = MediaPlayer.create(this@MainActivity, R.raw.first_audio)
mediaPlayer.start()
// Add completion listener, so that we can change the audio 
// once the first one is finished
mediaPlayer.setOnCompletionListener {
mediaPlayer.release()
mediaPlayer = MediaPlayer.create(this@MainActivity, R.raw.second_audio)
mediaPlayer.start()
}
// We are observing a MutableLiveData of Boolean type, 
// once it is true we will stop the intro media player 
// and start the radio player
viewModel.isPlayerReady.observe(this) { isReady ->
if(isReady) {
mediaPlayer.stop()
// Start radio media player
}
}
// This is how I am changing the value of MutableLiveData
demoBtn.setOnClickListener {
viewModel.isPlayerReady.value = true
}

我已经测试了上面的方法,它如预期的那样运行良好。


将视图模型链接到活动的步骤:

  1. 添加依赖项:implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"

  2. 制作一个视图模型类和一个布尔类型的可变活动变量。

    class MainViewModel: ViewModel() {
    val isPlayerReady = MutableLiveData<Boolean>()
    }

  3. 将视图模型与活动链接。

class MainActivity : AppCompatActivity() {

private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
....
}

最新更新