Search code examples
androidkotlinandroid-intentexoplayerexoplayer2.x

How to pass Video Link from an activity to another activity?


I want to pass a video link(string) from an activity to another in Android. I have used button.setOnClickListener and pass the string as intent.putextra. In the second activity I used intent.getStringExtra to get the string value and pass it to MediaItem but the app is not running. When I using hardcoded value the code is working properly, but I can't be able to get the value from the previous activity.

My First Activity :

class ButtonActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_button)
        val playbutton = findViewById<Button>(R.id.play_video)
        val videolink = "https://storage.googleapis.com/exoplayer-test-media-0/BigBuckBunny_320x180.mp4"

        playbutton.setOnClickListener {
            val intent = Intent(this,MainActivity::class.java)
            intent.putExtra("video",videolink)
            startActivity(intent)
        }
    }
}

My Second Activity:

class MainActivity : AppCompatActivity(){
    private var playerView: PlayerView? = null
    private var player: SimpleExoPlayer? = null
    private var playWhenReady = true
    private var currentWindow = 0
    private var playbackPosition: Long = 0
    private var flag :Boolean = false
    private val videolink = intent.getStringExtra("video")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        playerView = findViewById(R.id.video_view)
        val videolayout = findViewById<RelativeLayout>(R.id.video_layout)
        PlayerView.SHOW_BUFFERING_ALWAYS
        val btFullscreen = findViewById<ImageView>(R.id.bt_fullscreen)


        btFullscreen.setOnClickListener{
            if (flag){
                btFullscreen.setImageDrawable(resources.getDrawable(R.drawable.ic_fullscreen))
                requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
                videolayout.layoutParams.height = 300
                flag = false
            }
            else{
                btFullscreen.setImageDrawable(resources.getDrawable(R.drawable.ic_fullscreen_exit))
                requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
                flag = true
            }
        }
    }

    public override fun onStart() {
        super.onStart()
        if (Util.SDK_INT > 23) {
            initializePlayer()
        }
    }

    public override fun onResume() {
        super.onResume()
        hideSystemUi()
        if (Util.SDK_INT <= 23 || player == null) {
            initializePlayer()
        }
    }

    public override fun onPause() {
        super.onPause()
        if (Util.SDK_INT <= 23) {
            releasePlayer()
        }
    }

    public override fun onStop() {
        super.onStop()
        if (Util.SDK_INT > 23) {
            releasePlayer()
        }
    }

    private fun initializePlayer() {
        player = SimpleExoPlayer.Builder(this).build()
        playerView!!.player = player
        val mediaItem = MediaItem.fromUri(videolink!!)
        player!!.setMediaItem(mediaItem)
        player!!.playWhenReady = playWhenReady
        player!!.seekTo(currentWindow, playbackPosition)
        player!!.prepare()
        playerView!!.keepScreenOn = true
    }

    private fun releasePlayer() {
        if (player != null) {
            playbackPosition = player!!.currentPosition
            currentWindow = player!!.currentWindowIndex
            playWhenReady = player!!.playWhenReady
            player!!.release()
            player = null
        }
    }






    @SuppressLint("InlinedApi")
    private fun hideSystemUi() {
        playerView!!.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
                // Set the content to appear under the system bars so that the
                // content doesn't resize when the system bars hide and show.
                or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                // Hide the nav bar and status bar
                or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_FULLSCREEN)
    }


}

Solution

  • try this:

    class MainActivity : AppCompatActivity(){
        private var playerView: PlayerView? = null
        private var player: SimpleExoPlayer? = null
        private var playWhenReady = true
        private var currentWindow = 0
        private var playbackPosition: Long = 0
        private var flag :Boolean = false
        private var videolink = ""
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            videolink = intent.getStringExtra("video")
    
            playerView = findViewById(R.id.video_view)
            val videolayout = findViewById<RelativeLayout>(R.id.video_layout)
            PlayerView.SHOW_BUFFERING_ALWAYS
            val btFullscreen = findViewById<ImageView>(R.id.bt_fullscreen)
    
    
            btFullscreen.setOnClickListener{
                if (flag){
                    btFullscreen.setImageDrawable(resources.getDrawable(R.drawable.ic_fullscreen))
                    requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
                    videolayout.layoutParams.height = 300
                    flag = false
                }
                else{
                    btFullscreen.setImageDrawable(resources.getDrawable(R.drawable.ic_fullscreen_exit))
                    requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
                    flag = true
                }
            }
        }
    
        public override fun onStart() {
            super.onStart()
            if (Util.SDK_INT > 23) {
                initializePlayer()
            }
        }
    
        public override fun onResume() {
            super.onResume()
            hideSystemUi()
            if (Util.SDK_INT <= 23 || player == null) {
                initializePlayer()
            }
        }
    
        public override fun onPause() {
            super.onPause()
            if (Util.SDK_INT <= 23) {
                releasePlayer()
            }
        }
    
        public override fun onStop() {
            super.onStop()
            if (Util.SDK_INT > 23) {
                releasePlayer()
            }
        }
    
        private fun initializePlayer() {
            player = SimpleExoPlayer.Builder(this).build()
            playerView!!.player = player
            val mediaItem = MediaItem.fromUri(videolink!!)
            player!!.setMediaItem(mediaItem)
            player!!.playWhenReady = playWhenReady
            player!!.seekTo(currentWindow, playbackPosition)
            player!!.prepare()
            playerView!!.keepScreenOn = true
        }
    
        private fun releasePlayer() {
            if (player != null) {
                playbackPosition = player!!.currentPosition
                currentWindow = player!!.currentWindowIndex
                playWhenReady = player!!.playWhenReady
                player!!.release()
                player = null
            }
        }
    
    
    
    
    
    
        @SuppressLint("InlinedApi")
        private fun hideSystemUi() {
            playerView!!.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
                    // Set the content to appear under the system bars so that the
                    // content doesn't resize when the system bars hide and show.
                    or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    // Hide the nav bar and status bar
                    or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    or View.SYSTEM_UI_FLAG_FULLSCREEN)
        }
    
    
    }