Skip to main content
Version: Next

Change Mode - Android

In a live stream, audience members usually join in RECV_ONLY mode, meaning they can only view and listen to the hosts. However, if a host invites an audience member to actively participate (e.g., to speak or present), the audience member can switch their mode to SEND_AND_RECV using the changeMode() method.

caution

changeMode() only ever changes the mode of the participant who calls it. There is no form of changeMode() that takes another participant's id, and a host cannot change an audience member's mode directly.

Promotion therefore takes two pieces of code, one on each side, and neither does anything on its own:

  1. On the host — publish a request to the invited participant over PubSub. Step 1 and Step 2 below.
  2. On the invited participant — subscribe to that same topic and, in the message handler, call changeMode() yourself. Step 3 below. Without this subscriber the request reaches nobody and no mode ever changes.

An implementation that only publishes the request looks finished and does nothing.

This guide explains how to use the changeMode() method and walks through a sample implementation where a host invites an audience member to become a host using PubSub.

changeMode()

  • The changeMode() method from the Meeting class switches the calling participant's own mode during a live stream — for example, an audience member becoming a host.
  • It takes only the target mode. To move a different participant between modes, send them a PubSub request and let their client call changeMode() itself, as shown in the Implementation Guide below.

Example: a participant changing its own mode

class LiveStreamActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_live_stream);
// initialize the meeting
liveStream = VideoSDK.initMeeting(... )
...

// join meeting
liveStream!!.join()

// Button to change mode
val changeModeBtn: Button = findViewById(R.id.btnChangeMode)
changeModeBtn.setOnClickListener {
liveStream.changeMode(MeetingMode.SEND_AND_RECV)
}
}
}

Implementation Guide

Step 1 : Create a Pubsub Topic

  • Set up a PubSub topic to send a mode change request from the host to a specific audience member.
fun sendInvite(livestream: Meeting, participantId: String) {
val pubSubPublishOptions = PubSubPublishOptions().apply {
isPersist = false
}

livestream.pubSub.publish(
"REQUEST_TO_JOIN_AS_HOST_$participantId", // PubSub topic specific to participant
"SEND_AND_RECV", // message
pubSubPublishOptions
)
}

Step 2 : Create an Invite Button

  • Add an "Invite on Stage" button for each audience member. When clicked, it publishes a PubSub message with the mode "SEND_AND_RECV" to that participant.
// In ParticipantListAdapter.kt, inside showPopup method
if (participant!!.mode == "RECV_ONLY") {
popup.menu.add("Add as a co-host")

popup.setOnMenuItemClickListener { item: MenuItem ->
if (item.toString() == "Add as a co-host") {
sendInvite(liveStream,participantId);
holder.requestedIndicator.visibility = View.VISIBLE
holder.btnParticipantMoreOptions.isEnabled = false
return@setOnMenuItemClickListener true
}
false
}
}

Step 3 : Create a Listener to Change the Mode

  • On the audience side, subscribe to the specific PubSub topic. When a mode request is received, update the participant’s mode using changeMode().
// In your class where you define coHostListener
val coHostListener = object : PubSubMessageListener {
override fun onMessage(pubSubMessage: PubSubMessage) {
showCoHostRequestDialog()
}
}

liveStream.pubSub.subscribe(
"REQUEST_TO_JOIN_AS_HOST_${liveStream.localParticipant.id}",
coHostListener
)

// In the showCoHostRequestDialog method
private fun showCoHostRequestDialog() {
// Dialog setup code...

acceptBtn.setOnClickListener {
liveStream.changeMode("SEND_AND_RECV")
}
// Rest of the dialog code...
}

API Reference

The API references for all the methods and events utilized in this guide are provided below.

Got a Question? Ask us on discord


Was this helpful?