家长活动在后台时如何停止播放视频?

时间:2018-01-16 05:53:58

标签: android exoplayer

我最近尝试在我的android项目中使用谷歌的ExoPlayer。即使我已经打电话给所有必要的东西,Exoplayer也会继续播放视频。播放器没有被释放。看来releasePlayer()根本不起作用。即使我转移到其他活动,视频也会继续播放。我已经尝试了堆栈或codelabs网站上提供的所有解决方案等。这让我把这个问题放在堆栈上。

package com.android.maccino.ui

import android.content.Intent
import android.media.MediaPlayer
import android.net.Uri
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
import com.android.maccino.R
import com.android.maccino.models.SponsorModel
import com.android.maccino.utils.AppConstants
import com.android.maccino.utils.AppUtils
import com.google.android.exoplayer2.*
import com.google.android.exoplayer2.source.ExtractorMediaSource
import com.google.android.exoplayer2.source.MediaSource
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector
import com.google.android.exoplayer2.upstream.DefaultHttpDataSourceFactory
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.database.*
import com.kaopiz.kprogresshud.KProgressHUD
import com.orhanobut.logger.Logger
import com.squareup.picasso.Picasso
import kotlinx.android.synthetic.main.activity_dashboard.*
import java.util.*


class DashboardActivity : AppCompatActivity() {

    lateinit var sponsorModel: SponsorModel
    lateinit var mDatabaseRef: DatabaseReference
    lateinit var kProgressHud: KProgressHUD
    lateinit var mSponsorList: MutableList<SponsorModel>
    lateinit var player: SimpleExoPlayer
    var currentWindow: Int = 0
    var playbackPosition: Long = 0;
    var wasPlayingBefore: Boolean = false

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

        mDatabaseRef = FirebaseDatabase.getInstance().reference
        sponsorModel = SponsorModel()
        mSponsorList = ArrayList<SponsorModel>()

        Logger.d(FirebaseAuth.getInstance().currentUser!!.uid)


        if (intent != null &&
                intent.getSerializableExtra(AppConstants.INTENT_SPONSOR_MODEL) != null) {
            sponsorModel = intent.getSerializableExtra(AppConstants.INTENT_SPONSOR_MODEL) as SponsorModel
            setValues()
        }



        btnAnswer1.setOnClickListener {
            if (sponsorModel.answers.get(0).getValue(btnAnswer1.text.toString()) == true) {
                makeAnsweredSponsorEntry()
                startActivity(Intent(this@DashboardActivity, CorrectAnswer::class.java).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra(AppConstants.INTENT_SPONSOR_MODEL, sponsorModel))
                this.finish()
            } else if (sponsorModel.answers.get(0).getValue(btnAnswer1.text.toString()) == false) {
                startActivity(Intent(this@DashboardActivity, WrongAnswer::class.java))
            }
        }

        btnAnswer2.setOnClickListener {
            if (sponsorModel.answers.get(1).getValue(btnAnswer2.text.toString()) == true) {
                makeAnsweredSponsorEntry()
                startActivity(Intent(this@DashboardActivity, CorrectAnswer::class.java).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra(AppConstants.INTENT_SPONSOR_MODEL, sponsorModel))
                this.finish()
            } else if (sponsorModel.answers.get(1).getValue(btnAnswer2.text.toString()) == false) {
                startActivity(Intent(this@DashboardActivity, WrongAnswer::class.java))
            }
        }
        btnAnswer3.setOnClickListener {
            if (sponsorModel.answers.get(2).getValue(btnAnswer3.text.toString()) == true) {
                makeAnsweredSponsorEntry()
                startActivity(Intent(this@DashboardActivity, CorrectAnswer::class.java).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra(AppConstants.INTENT_SPONSOR_MODEL, sponsorModel))
                this.finish()
            } else if (sponsorModel.answers.get(2).getValue(btnAnswer3.text.toString()) == false) {
                startActivity(Intent(this@DashboardActivity, WrongAnswer::class.java))
            }
        }

        tvSearch.setOnClickListener { startActivity(Intent(this@DashboardActivity, SearchActivity::class.java).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) }


    }

    override fun onResume() {
        super.onResume()
         initializePlayer() 
    }

    override fun onPause() {
        super.onPause()

      if (Util.SDK_INT <= 23) {
         releasePlayer();
      }

    }


    private fun setValues() {
        try {
            tvQuestion.setText(sponsorModel.question)
            sponsorModel.answers.get(0).keys.forEach { key: String ->
                btnAnswer1.setText(key)
            }
            sponsorModel.answers.get(1).keys.forEach { key: String ->
                btnAnswer2.setText(key)
            }
            sponsorModel.answers.get(2).keys.forEach { key: String ->
                btnAnswer3.setText(key)
            }
            tvSponsorName.setText(sponsorModel.sponsor_name)
            Picasso.with(this@DashboardActivity).load(sponsorModel.logo).into(ivSponsorLogo)


        ivFlag.setOnClickListener { startActivity(Intent(Intent.ACTION_VIEW).setDataAndType(Uri.parse(sponsorModel.video_url), "video/*")) }
          initializePlayer()
        } catch (e: Exception) {
            e.printStackTrace()
        }


    }


    //Player implementation
    private fun initializePlayer() {
        try {

            player = ExoPlayerFactory.newSimpleInstance(
                    DefaultRenderersFactory(this@DashboardActivity),
                    DefaultTrackSelector(), DefaultLoadControl())

           player.repeatMode = Player.REPEAT_MODE_ALL


            playerView.player = player
            playerView.hideController()

            player.setPlayWhenReady(true)
            player.seekTo(currentWindow, playbackPosition);

            val uri = Uri.parse(sponsorModel.video_url)
            val mediaSource = buildMediaSource(uri)
            player.prepare(mediaSource, true, false)
            wasPlayingBefore = true
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    private fun buildMediaSource(uri: Uri): MediaSource {
        return ExtractorMediaSource.Factory(
                DefaultHttpDataSourceFactory("exoplayer-maccino")).createMediaSource(uri)
    }

    private fun releasePlayer() {
        if (player != null) {
            playbackPosition = player.currentPosition
            currentWindow = player.currentWindowIndex
            player.playWhenReady = false
            player.setRepeatMode(Player.REPEAT_MODE_OFF)
            player.stop()
            player.release()
            playerView.player = null


//            player = null
        }
    }
}

0 个答案:

没有答案