我想知道在通话过程中是否可以将当前通话与使用 Flutter 开发的应用程序进行的另一个通话合并?
在通话期间,我希望能够从我的应用程序添加另一个通话,并自动合并两个通话。
我一直找不到带电话控制的flutter包。
问候
我认为对于
iOS
,最好使用 CallKit framework
来处理呼叫管理,而在 Android
中,最好使用 Android TelephonyManager
和 Call APIs
以编程方式控制电话呼叫,所以让我向您展示一个示例,但请注意,这只是一个演示呼叫合并概念的基本示例!!!
在
iOS
和在 Objective-C
#import <CallKit/CallKit.h>
@interface CallMergeManager : NSObject
@property (nonatomic, strong) CXCallController *callController;
@end
@implementation CallMergeManager
- (instancetype)init {
self = [super init];
if (self) {
_callController = [[CXCallController alloc] init];
}
return self;
}
- (void)mergeCalls {
CXSetMutedCallAction *mergeAction = [[CXSetMutedCallAction alloc] initWithCallUUID:[NSUUID UUID] muted:NO];
CXTransaction *transaction = [[CXTransaction alloc] initWithAction:mergeAction];
[self.callController requestTransaction:transaction completion:^(NSError * _Nullable error) {
if (error) {
NSLog(@"merging calls error: %@", error);
}
}];
}
@end
在
Android
和 java
中,类似这样 :
public class CallMergeManager {
private TelephonyManager telephonyManager;
public CallMergeManager(Context context) {
telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
}
public void mergeCalls() {
telephonyManager.mergeCalls();
}
}
现在,在
Flutter
中,您可以定义一个平台通道来与原生代码进行通信,如下所示(iOS 和 Android)
import 'package:flutter/services.dart';
final MethodChannel _channel = MethodChannel('call_merge_channel');
Future<void> mergeCalls() async {
try {
await _channel.invokeMethod('mergeCalls');
} catch (e) {
print('merging calls error: $e');
}
}
以及从
mergeCalls
调用 Flutter
来触发呼叫合并:
mergeCalls();
祝你好运!