# Join a meeting for any user > The code on this page works with either the **default UI** or the **custom UI**. This content applies to all user types. ## Join with a meeting number To join a meeting, retrieve a `MeetingService` instance from ZoomSDK. ```java int ret = -1; MeetingService meetingService = mZoomSDK.getMeetingService(); if(meetingService == null) { return ret; } ``` Then, configure the meeting options in `JoinMeetingOptions`. ```java JoinMeetingOptions opts = ZoomMeetingUISettingHelper.getJoinMeetingOptions(); // some available options opts.no_driving_mode = true; opts.no_invite = true; opts.no_meeting_end_message = true; opts.no_titlebar = true; opts.no_bottom_toolbar = true; opts.no_dial_in_via_phone = true; opts.no_dial_out_to_phone = true; opts.no_disconnect_audio = true; opts.no_share = true; opts.invite_options = InviteOptions.INVITE_VIA_EMAIL + InviteOptions.INVITE_VIA_SMS; opts.no_audio = true; opts.no_video = true; opts.meeting_views_options = MeetingViewsOptions.NO_BUTTON_SHARE; opts.no_meeting_error_message = true; opts.participant_id = "participant id"; ``` When the options are set, prepare the meeting parameters to pass to the join meeting function. ```java JoinMeetingParams params = new JoinMeetingParams(); params.displayName = DISPLAY_NAME; params.meetingNo = meetingNo; params.password = meetingPassword; ``` Once the options and parameters are ready, pass them to `joinMeetingWithParams` to join the meeting. ```java // with options int response = meetingService.joinMeetingWithParams(this, params, opts); // with default options int response = meetingService.joinMeetingWithParams(this, params); ``` ## Join with a vanity ID A **vanity ID** is a special and personalized ID that uniquely belongs to a user. To join a meeting with vanity ID instead of meeting number, the process is exactly the same as joining a meeting with meeting number. Just storing `vanity id` in `JoinMeetingParams` instead of storing `meeting number`. ```java int ret = -1; MeetingService meetingService = mZoomSDK.getMeetingService(); if(meetingService == null) { return ret; } JoinMeetingOptions opts =ZoomMeetingUISettingHelper.getJoinMeetingOptions(); JoinMeetingParams params = new JoinMeetingParams(); params.displayName = DISPLAY_NAME; params.vanityID = vanityId; params.password = meetingPassword; return meetingService.joinMeetingWithParams(context, params,opts); ``` ## Join Meeting status To know whether the join meeting action is a success or not, or to get the error message, implement the `onMeetingStatusChange` method. ```java @Override public void onMeetingStatusChanged(MeetingStatus meetingStatus, int errorCode, int internalErrorCode) { Log.i(TAG, "onMeetingStatusChanged, meetingStatus=" + meetingStatus + ", errorCode=" + errorCode + ", internalErrorCode=" + internalErrorCode); if(meetingStatus == MeetingStatus.MEETING_STATUS_FAILED && errorCode == MeetingError.MEETING_ERROR_CLIENT_INCOMPATIBLE) { Toast.makeText(this, "Version of ZoomSDK is too low!", Toast.LENGTH_LONG).show(); } } ``` ## Get the current meeting's available audio types To get an integer representing the current meeting's supported audio type, call the `getSupportedMeetingAudioType` interface after joining a meeting. The integer value is `bitwise OR` - a bitwise operation - of each supported audio type presented in the `InMeetingSupportAudioType` enum. For example, if the current meeting supports both VOIP and telephony, the return value of `getSupportedMeetingAudioType` for that meeting is `AUDIO_TYPE_VOIP` and `AUDIO_TYPE_TELEPHONY`. ---