【问题标题】:Mediaplayer does not stop媒体播放器不会停止
【发布时间】:2020-07-27 14:33:57
【问题描述】:

虽然我没有 100% 播放媒体播放器,但现在它不会停止。我收到以下错误

E/ExtMediaPlayer-JNI:无法定位 QCMediaPlayer.... E/MediaPlayer-JNI:JNIMediaPlayerFactory:bIsQCMediaPlayerPresent 0 E/ExtMediaPlayer-JNI:无法定位 QCMediaPlayer.... E/MediaPlayer-JNI:JNIMediaPlayerFactory:bIsQCMediaPlayerPresent 0 E/MediaPlayer:在状态 1 中停止调用,mPlayer(0x0) 错误 (-38, 0) W/MediaPlayer: mediaplayer 因未处理的事件而消失

package com.radiomedia.drn1


import android.media.AudioManager
import android.media.MediaPlayer
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity(){



    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)



        playButton.setOnClickListener(object: View.OnClickListener {
            override fun onClick(v: View?) {


                if(playButton.text.toString()=="Pause") {
                    media().play()
               
                }
                else{
                    media().stop()
                }

            }

        })

    }




}

class media(){
    val mp = MediaPlayer()

   fun play(){
        val url = "http://stream.radiomedia.com.au:8003/stream" // your URL here
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC)
        mp.setDataSource(url)
        mp.prepare() // might take long! (for buffering, etc)

        mp.start()
    }
    fun stop(){
        mp.stop()
        mp.release()
    }


}

【问题讨论】:

  • 嗨罗素。你的进展如何?下面有一个答案可以引起你的注意。虽然这里没有严格要求回答或投票,但如果没有人这样做,社区就会崩溃。

标签: android kotlin android-mediaplayer


【解决方案1】:

您正在实例化完全不同的 MediaPlayer 实例。通过调用media(),您将创建media 类的新实例,然后创建MediaPlayer 的新实例作为其属性mp。但是由于这个media 实例不是MainActivity 的属性,所以当点击监听器返回时它会超出范围。

然后底层媒体播放器被释放,这解释了您看到的错误。但即使没有该错误,调用 stop 也不会产生任何影响,因为您不是在正在运行的 MediaPlayer 上调用它,而是在一个全新的 MediaPlayer 上调用它。

要实现您想要的,您需要在MainActivity 中添加一个属性,例如:

class MainActivity : AppCompatActivity(){

    private lateinit var mMedia: media

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        mMedia = media()


        playButton.setOnClickListener(object: View.OnClickListener {
            override fun onClick(v: View?) {

                if(playButton.text.toString()=="Pause") {
                    // Go back to start to replay
                    mMedia.seekTo(0)
                    mMedia.start()
                }
                else{
                    // Stopping prevents MediaPlayer to be played again. Use pause() instead
                    mMedia.pause()
                }
            }
        })
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多