CallManager constructor
CallManager()
Implementation
CallManager() {
NEEventNotify().register(setStateEventOnCallReceived, (arg) async {
if ((Platform.isAndroid &&
await NECallKitPlatform.instance.isAppInForeground()) ||
Platform.isIOS) {
if (_enableIncomingBanner &&
CallState.instance.selfUser.callRole == NECallRole.called) {
// 并发来电检查:若横幅已显示,说明已有一路来电,新来电回复忙线并丢弃
if (_bannerIsActive) {
CallKitUILog.i(_tag, 'secondCallIgnored replyBusy');
await NECallEngine.instance.hangup();
return;
}
CallKitUILog.i(_tag, 'showIncomingBanner enableIncomingBanner=true');
_bannerIsActive = true;
// 先同步来电方信息到 native,确保 iOS NECallState 有最新数据再展示横幅
await NECallKitPlatform.instance.updateCallStateToNative();
await NECallKitPlatform.instance.setIncomingBannerEnabled(true);
// Android: 直接调用 showIncomingBanner() 触发 WindowManager 展示横幅;
// iOS 层由 NEFlutterIncomingBannerHandler 响应并展示 NEIncomingCallBannerWindow。
if (Platform.isAndroid) {
await NECallKitPlatform.instance.showIncomingBanner();
}
// 注册 onCallEnd 监听:通话结束时自动取消横幅并重置活跃状态
void onCallEndHandler(dynamic arg) {
CallKitUILog.i(_tag, 'dismissIncomingBanner reason=callEnded');
NECallKitPlatform.instance.cancelIncomingBanner();
_bannerIsActive = false;
NEEventNotify().unregister(setStateEventOnCallEnd, onCallEndHandler);
}
NEEventNotify().register(setStateEventOnCallEnd, onCallEndHandler);
return;
}
NECallKitNavigatorObserver.getInstance().enterCallingPage();
var permissionResult =
await Permission.request(CallState.instance.callType);
if (PermissionResult.granted == permissionResult) {
} else {
CallManager.instance.reject();
CallingBellFeature.stopRing();
}
} else {
NECallKitNavigatorObserver.getInstance().enterCallingPage();
}
});
}