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)
}
}
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)
}
}