Description
startAnnotation method not working for customised UI
Which Client Android SDK version?
zoom-sdk-android-5.4.3.613
To Reproduce(If applicable)
Steps to reproduce the behavior:
- Go to ‘Using android sdk first set customised UI to true then enable waiting room and start meeting with params.’
- Start screen share with “startShareScreenSession” method. [We have disabled display over app permission to hide floating annotation button over app].
- After screen sharing starts, calling “startAnnotation” on our apps custom button press event.
- startAnnotation error: SDKERR_OTHER_ERROR, however canDoAnnotation flag is: true and isPresenter: false
Screenshots
If applicable, add screenshots to help explain your problem.
Smartphone (please complete the following information):
- Device: [OnePlus6]
- OS: [Android 10]
- Version [Oxygen os 10.3.7]
Additional context
Code is as below:
Initialising SDK:
``ZoomSDK zoomSDK = ZoomSDK.getInstance();
ZoomSDKInitParams initParams = new ZoomSDKInitParams();
initParams.jwtToken = “ ”;
initParams.enableLog = true;
initParams.logSize = 50;
initParams.domain= “zoom.us”;
initParams.appKey = “ ";
initParams.appSecret = " ”;
initParams.videoRawDataMemoryMode = ZoomSDKRawDataMemoryMode.ZoomSDKRawDataMemoryModeStack;
zoomSDK.initialize(this, mZoomSDKListener, initParams);
zoomSDK.addAuthenticationListener(mZoomSDKListener);``
Enable waiting room:
``
PreMeetingService preMeetingService = ZoomSDK.getInstance().getPreMeetingService();
if (preMeetingService == null) {
Log.i(TAG, “preMeetingService is null.”);
return;
}
MeetingItem meetingItem = preMeetingService.getMeetingItemByUniqueId(Long.parseLong(MEETING_ID));
if (meetingItem == null) {
Log.i(TAG, “meetingItem is null.”);
return;
}
meetingItem.setMeetingTopic("***");
meetingItem.setEnableWaitingRoom(true);
meetingItem.setCanJoinBeforeHost(false);
InMeetingWaitingRoomController waitingRoomController = ZoomSDK.getInstance().getInMeetingService().getInMeetingWaitingRoomController();
if (waitingRoomController.isSupportWaitingRoomUponEntryFeature()) {
waitingRoomController.enableWaitingRoomOnEntry(true);
}``
Enabling customised UI:
ZoomSDK.getInstance().getMeetingSettingsHelper().setCustomizedMeetingUIEnabled(true);
Start meeting:
``
public void startMeeting() {
enableWaitingRoom();
if (ZoomSDK.getInstance().getMeetingSettingsHelper().isCustomizedMeetingUIEnabled()) {
QtNative.activity().runOnUiThread(new Runnable() {
@Override
public void run() {
Log.i(TAG, "startMeeting, runOnUiThread");
MeetingService meetingService = ZoomSDK.getInstance().getMeetingService();
if (meetingService == null) {
Log.i(TAG, "startMeeting, meetingService is null");
return;
}
StartMeetingOptions opts = new StartMeetingOptions();
opts.no_video=true;
if (ZoomSDK.getInstance().isLoggedIn()) {
StartMeetingParams4NormalUser params = new StartMeetingParams4NormalUser();
params.meetingNo = MEETING_ID;
int res = meetingService.startMeetingWithParams(QtNative.activity(), params, opts);
Log.i(TAG, "startMeeting, startMeetingWithParams with login res: " + res);
} else {
StartMeetingParamsWithoutLogin params = new StartMeetingParamsWithoutLogin();
APIUserInfo userInfo = getAPIUserInfo();
if (userInfo != null) {
params.userId = userInfo.userId;
params.userType = STYPE;
params.displayName = "Name";
params.zoomAccessToken = userInfo.userZoomAccessToken;
params.meetingNo = MEETING_ID;
int res = meetingService.startMeetingWithParams(QtNative.activity(), params, opts);
Log.i(TAG, "startMeeting, startMeetingWithParams without login res: " + res);
} else {
Log.i(TAG, "startMeeting, Invalid User Info");
}
}
}
});
} else {
Log.i(TAG, "startMeeting, isCustomizedMeetingUIEnabled is false");
}
}``
Start Sharing:
``
public void shareScreen() {
Log.i(TAG, "shareScreen");
InMeetingShareController inMeetingShareController =
ZoomSDK.getInstance().getInMeetingService().getInMeetingShareController();
if (inMeetingShareController.isOtherSharing()) {
return;
}
if (mScreenInfoData == null) {
MediaProjectionManager mgr = (MediaProjectionManager) QtNative.activity().getSystemService(Context.MEDIA_PROJECTION_SERVICE);
if (mgr != null) {
Intent intent = mgr.createScreenCaptureIntent();
try {
QtNative.activity().startActivityForResult(mgr.createScreenCaptureIntent(), REQUEST_SHARE_SCREEN_PERMISSION);
} catch (Exception e) {
Log.e(TAG, "askScreenSharePermission failed");
}
}
} else {
startShareScreenSession(mScreenInfoData);
}
}
public void startScreenSharing(Intent data) {
Log.i(TAG, "startScreenSharing");
InMeetingShareController inMeetingShareController = ZoomSDK.getInstance().getInMeetingService().getInMeetingShareController();
if (data == null) {
Log.e(TAG, " startScreenSharing intent object is null.");
return;
}
mScreenInfoData = data;
if (!inMeetingShareController.isOtherSharing()) {
startShareScreenSession(mScreenInfoData);
}
}
public void startShareScreenSession(Intent data) {
Log.i(TAG, "startShareScreenSession");
if (data == null) {
Log.e(TAG, " startShareScreenSession intent object is null.");
return;
}
MobileRTCSDKError error = ZoomSDK.getInstance().getInMeetingService().getInMeetingShareController().startShareScreenSession(data);
Log.i(TAG, " startShareScreenSession error: " + error);
}``
Start Annotation:
public void startAnnotation() {
QtNative.activity().runOnUiThread(new Runnable() {
@Override
public void run() {
InMeetingAnnotationController inMeetingAnnotationController = ZoomSDK.getInstance().getInMeetingService().getInMeetingAnnotationController();
if (inMeetingAnnotationController == null) {
Log.e(TAG, " Failed to startAnnotation as inMeetingAnnotationController is null.");
return;
}
Log.i(TAG, " canDoAnnotation: " + inMeetingAnnotationController.canDoAnnotation() + " isPresenter: " + inMeetingAnnotationController.isPresenter()
+ " canDisableViewerAnnotation: " + inMeetingAnnotationController.canDisableViewerAnnotation() + " isViewerAnnotationDisabled: " + inMeetingAnnotationController.isViewerAnnotationDisabled());
error = inMeetingAnnotationController.startAnnotation();
Log.i(TAG, " startAnnotation error: " + error);
error = inMeetingAnnotationController.setToolColor(RED);
error = inMeetingAnnotationController.setToolType(AnnotationToolType.ANNO_TOOL_TYPE_PEN);
}
});
}