Manage On-Screen Participants - Android
It is important that only the necessary person are present on the screen when livestream is on. To handle this, we will be using the pin and unpin methods of the Participant class.
To ensure only the hosts/speakers are shown in the grid, you should use the SPOTLIGHT layout and pin as the priority when starting the interactive livestream.
Let us first explore two methods that we will be using to manage on-screen participants.
pin()
With these method you can pin any participant's Camera, Screen Share or both. This can be useful to identify the participants based on which you can perform rendering participant grid.
unpin()
With these methods you can unpin any participant's Camera, Screen Share or both. This can be useful to reset pin state of the participant.
Important Changes Android SDK in Version v0.2.0
- The following modes have been deprecated:
 CONFERENCEhas been replaced bySEND_AND_RECVVIEWERhas been replaced bySIGNALLING_ONLY
Please update your implementation to use the new modes.
⚠️ Compatibility Notice:
To ensure a seamless meeting experience, all participants must use the same SDK version.
Do not mix version v0.2.0 + with older versions, as it may cause significant conflicts.
Managing On-Screen Participants
- If you want to pin all the hosts/speakers automatically, you can do it by listenting to the 
onMeetingJoinedcallback andonParticipantModeChanged, where you canpinandunpinbased on the mode. 
- Kotlin
 - Java
 
private val meetingEventListener: MeetingEventListener = object : MeetingEventListener() {
  override fun onMeetingJoined() {
        val localParticipant = meeting!!.localParticipant
        //We will pin the participant if mode is SEND_AND_RECV
        if (localParticipant.mode == "SEND_AND_RECV") {
            localParticipant.pin()
        } else {
            localParticipant.unpin()
        }
   }
  override fun onParticipantModeChanged(data: JSONObject) {
    val localParticipant = meeting!!.localParticipant
    //We will pin the participant if mode is SEND_AND_RECV else unpin him
    if(localParticipant.id.equals(data.getString("peerId"))
    {
        if(localParticipant.mode == "SEND_AND_RECV")
        {
            localParticipant.pin()
        }else{
            localParticipant.unpin()
        }
    }
  }
}
override fun onCreate(savedInstanceState: Bundle?) {
  //...
  // add listener to meeting
  meeting!!.addEventListener(meetingEventListener)
}
private final MeetingEventListener meetingEventListener = new MeetingEventListener() {
  @Override
  public void onMeetingJoined() {
    Participant localParticipant = meeting.getLocalParticipant();
    //We will pin the participant if mode is SEND_AND_RECV
    if (localParticipant.getMode() == "SEND_AND_RECV") {
        localParticipant.pin();
    } else {
        localParticipant.unpin();
    }
  }
  @Override
  public void onParticipantModeChanged(JSONObject data) {
    Participant localParticipant = meeting.getLocalParticipant();
    //We will pin the participant if mode is SEND_AND_RECV else unpin him
    if(localParticipant.getId().equals(data.getString("peerId"))
    {
        if(localParticipant.getMode() == "SEND_AND_RECV")
        {
            localParticipant.pin();
        }else{
            localParticipant.unpin();
        }
    }
  }
};
@Override
protected void onCreate(Bundle savedInstanceState) {
  //...
  // add listener to meeting
  meeting.addEventListener(meetingEventListener);
}
- When rendering the participant grid on the Speaker side, make sure to show only the participants who are in 
SEND_AND_RECVmode. You can filter the participants as shown in below example. 
- Kotlin
 - Java
 
 private fun getSpeakerList(): List<Participant?>? {
    val speakerList: MutableList<Participant?> = ArrayList()
    val participants = meeting!!.participants
    for (entry: Map.Entry<String, Participant> in participants.entries) {
        val participant = entry.value
        if (participant.mode == "SEND_AND_RECV") {
            speakerList.add(participant)
        }
    }
    return speakerList
}
private List<Participant> getSpeakerList() {
    List<Participant> speakerList = new ArrayList();
    Map<String, Participant> participants = meeting.getParticipants();
    for (Map.Entry<String, Participant> entry : participants.entrySet()) {
        Participant participant = entry.getValue();
        if (participant.getMode().equals("SEND_AND_RECV")) {
            speakerList.add(participant);
        }
    }
    return speakerList;
}
API Reference
The API references for all the methods utilized in this guide are provided below.
Got a Question? Ask us on discord

