From 8f4deaac4e5fa6f47158c04067261500860b5ad6 Mon Sep 17 00:00:00 2001 From: CodeST <694468528@qq.com> Date: Thu, 15 Jan 2026 19:00:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=BD=95=E9=9F=B3=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared/KBVoiceBridgeNotification.h | 26 --- Shared/KBVoiceBridgeNotification.m | 14 -- Shared/KBVoiceRecordManager.h | 21 -- Shared/KBVoiceRecordManager.m | 312 ----------------------------- keyBoard.xcodeproj/project.pbxproj | 14 -- keyBoard/AppDelegate.m | 18 +- 6 files changed, 1 insertion(+), 404 deletions(-) delete mode 100644 Shared/KBVoiceBridgeNotification.h delete mode 100644 Shared/KBVoiceBridgeNotification.m delete mode 100644 Shared/KBVoiceRecordManager.h delete mode 100644 Shared/KBVoiceRecordManager.m diff --git a/Shared/KBVoiceBridgeNotification.h b/Shared/KBVoiceBridgeNotification.h deleted file mode 100644 index f2ce7f7..0000000 --- a/Shared/KBVoiceBridgeNotification.h +++ /dev/null @@ -1,26 +0,0 @@ -// -// KBVoiceBridgeNotification.h -// 通用的语音录制桥接常量(App 与键盘扩展共享) -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -/// 扩展 -> 主 App:请求开始录音 -extern NSString * const KBDarwinVoiceStartRequest; // "com.loveKey.nyx.voice.start" -/// 扩展 -> 主 App:请求停止录音 -extern NSString * const KBDarwinVoiceStopRequest; // "com.loveKey.nyx.voice.stop" -/// 主 App -> 扩展:录音文件已就绪 -extern NSString * const KBDarwinVoiceReady; // "com.loveKey.nyx.voice.ready" -/// 主 App -> 扩展:录音失败 -extern NSString * const KBDarwinVoiceFailed; // "com.loveKey.nyx.voice.failed" - -/// App Group: 录音文件路径(NSString) -extern NSString * const KBVoiceBridgeFilePathKey; -/// App Group: 录音错误信息(NSString) -extern NSString * const KBVoiceBridgeErrorKey; -/// App Group: 录音时间戳(NSNumber) -extern NSString * const KBVoiceBridgeTimestampKey; - -NS_ASSUME_NONNULL_END diff --git a/Shared/KBVoiceBridgeNotification.m b/Shared/KBVoiceBridgeNotification.m deleted file mode 100644 index 89fa884..0000000 --- a/Shared/KBVoiceBridgeNotification.m +++ /dev/null @@ -1,14 +0,0 @@ -// -// KBVoiceBridgeNotification.m -// - -#import "KBVoiceBridgeNotification.h" - -NSString * const KBDarwinVoiceStartRequest = @"com.loveKey.nyx.voice.start"; -NSString * const KBDarwinVoiceStopRequest = @"com.loveKey.nyx.voice.stop"; -NSString * const KBDarwinVoiceReady = @"com.loveKey.nyx.voice.ready"; -NSString * const KBDarwinVoiceFailed = @"com.loveKey.nyx.voice.failed"; - -NSString * const KBVoiceBridgeFilePathKey = @"kb_voice_file_path"; -NSString * const KBVoiceBridgeErrorKey = @"kb_voice_error"; -NSString * const KBVoiceBridgeTimestampKey = @"kb_voice_ts"; diff --git a/Shared/KBVoiceRecordManager.h b/Shared/KBVoiceRecordManager.h deleted file mode 100644 index c8099af..0000000 --- a/Shared/KBVoiceRecordManager.h +++ /dev/null @@ -1,21 +0,0 @@ -// -// KBVoiceRecordManager.h -// 主 App 录音管理(用于键盘桥接) -// - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface KBVoiceRecordManager : NSObject - -+ (instancetype)shared; - -- (void)startRecording; -- (void)stopRecording; - -@property (nonatomic, assign, readonly, getter=isRecording) BOOL recording; - -@end - -NS_ASSUME_NONNULL_END diff --git a/Shared/KBVoiceRecordManager.m b/Shared/KBVoiceRecordManager.m deleted file mode 100644 index af0abc4..0000000 --- a/Shared/KBVoiceRecordManager.m +++ /dev/null @@ -1,312 +0,0 @@ -// -// KBVoiceRecordManager.m -// - -#import "KBVoiceRecordManager.h" -#import "KBConfig.h" -#import "KBVoiceBridgeNotification.h" -#import "KBHUD.h" -#import - -static void KBVoiceBridgeDarwinCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo); - -@interface KBVoiceRecordManager () -@property (nonatomic, strong) AVAudioRecorder *recorder; -@property (nonatomic, strong) NSURL *recordURL; -@property (nonatomic, assign, readwrite, getter=isRecording) BOOL recording; -@property (nonatomic, assign) BOOL pendingStart; -@end - -@implementation KBVoiceRecordManager - -+ (instancetype)shared { - static KBVoiceRecordManager *m; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ m = [KBVoiceRecordManager new]; }); - return m; -} - -- (instancetype)init { - if (self = [super init]) { - CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), - (__bridge const void *)(self), - KBVoiceBridgeDarwinCallback, - (__bridge CFStringRef)KBDarwinVoiceStartRequest, - NULL, - CFNotificationSuspensionBehaviorDeliverImmediately); - CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), - (__bridge const void *)(self), - KBVoiceBridgeDarwinCallback, - (__bridge CFStringRef)KBDarwinVoiceStopRequest, - NULL, - CFNotificationSuspensionBehaviorDeliverImmediately); - } - return self; -} - -- (void)dealloc { - CFNotificationCenterRemoveObserver(CFNotificationCenterGetDarwinNotifyCenter(), - (__bridge const void *)(self), - (__bridge CFStringRef)KBDarwinVoiceStartRequest, - NULL); - CFNotificationCenterRemoveObserver(CFNotificationCenterGetDarwinNotifyCenter(), - (__bridge const void *)(self), - (__bridge CFStringRef)KBDarwinVoiceStopRequest, - NULL); -} - -static void KBVoiceBridgeDarwinCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { - KBVoiceRecordManager *self = (__bridge KBVoiceRecordManager *)observer; - if (!self) { return; } - NSString *n = (__bridge NSString *)name; - NSLog(@"[KBVoiceBridge][App] Darwin received: %@", n); - dispatch_async(dispatch_get_main_queue(), ^{ - if ([n isEqualToString:KBDarwinVoiceStartRequest]) { - [self startRecording]; - } else if ([n isEqualToString:KBDarwinVoiceStopRequest]) { - [self stopRecording]; - } - }); -} - -#pragma mark - Public - -- (void)startRecording { - if (self.isRecording) { - NSLog(@"[KBVoiceBridge][App] startRecording already recording, stop then restart"); - [self stopRecording]; -// return; - } - NSLog(@"[KBVoiceBridge][App] startRecording begin"); - [self kb_clearSharedState]; - - AVAudioSession *session = [AVAudioSession sharedInstance]; - AVAudioSessionRecordPermission permission = session.recordPermission; - if (permission == AVAudioSessionRecordPermissionDenied) { - NSLog(@"[KBVoiceBridge][App] recordPermission denied"); - [self kb_postFailed:KBLocalized(@"麦克风权限未开启")]; - return; - } - if (permission == AVAudioSessionRecordPermissionUndetermined) { - NSLog(@"[KBVoiceBridge][App] recordPermission undetermined, requesting"); - self.pendingStart = YES; - __weak typeof(self) weakSelf = self; - [session requestRecordPermission:^(BOOL granted) { - dispatch_async(dispatch_get_main_queue(), ^{ - __strong typeof(weakSelf) self = weakSelf; - if (!self) { return; } - if (!self.pendingStart) { return; } - self.pendingStart = NO; - if (!granted) { - NSLog(@"[KBVoiceBridge][App] recordPermission request denied"); - [self kb_postFailed:KBLocalized(@"麦克风权限未开启")]; - return; - } - NSLog(@"[KBVoiceBridge][App] recordPermission request granted"); - [self startRecording]; - }); - }]; - return; - } - - NSError *error = nil; - if (@available(iOS 10.0, *)) { - [session setCategory:AVAudioSessionCategoryPlayAndRecord - mode:AVAudioSessionModeDefault - options:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionAllowBluetooth - error:&error]; - } else { - [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; - } - if (error) { - NSLog(@"[KBVoiceBridge][App] setCategory error: %@", error.localizedDescription); - [self kb_postFailed:KBLocalized(@"麦克风初始化失败")]; - return; - } - [session setActive:YES error:&error]; - if (error) { - NSLog(@"[KBVoiceBridge][App] setActive error: %@", error.localizedDescription); - [self kb_postFailed:error.localizedDescription ?: KBLocalized(@"麦克风启动失败")]; - return; - } - if (!session.isInputAvailable) { - NSLog(@"[KBVoiceBridge][App] input not available"); - [self kb_postFailed:KBLocalized(@"麦克风不可用")]; - return; - } - - NSURL *aacURL = [self kb_voiceFileURLWithExtension:@"m4a"]; - if (!aacURL) { - NSLog(@"[KBVoiceBridge][App] app group not configured"); - [self kb_postFailed:KBLocalized(@"App Group 未配置,无法共享录音")]; - return; - } - NSDictionary *aacSettings = [self kb_voiceRecordSettingsAAC]; - if ([self kb_tryStartRecorderWithSettings:aacSettings fileURL:aacURL error:&error]) { - NSLog(@"[KBVoiceBridge][App] recorder started (aac) url=%@", aacURL); - self.recordURL = aacURL; - self.recording = YES; - return; - } - - NSURL *pcmURL = [self kb_voiceFileURLWithExtension:@"caf"]; - if (!pcmURL) { - NSLog(@"[KBVoiceBridge][App] app group not configured"); - [self kb_postFailed:KBLocalized(@"App Group 未配置,无法共享录音")]; - return; - } - NSDictionary *pcmSettings = [self kb_voiceRecordSettingsPCM]; - error = nil; - if ([self kb_tryStartRecorderWithSettings:pcmSettings fileURL:pcmURL error:&error]) { - NSLog(@"[KBVoiceBridge][App] recorder started (pcm) url=%@", pcmURL); - self.recordURL = pcmURL; - self.recording = YES; - return; - } - - NSLog(@"[KBVoiceBridge][App] recorder start failed: %@", error.localizedDescription); - NSString *tip = error.localizedDescription ?: KBLocalized(@"录音启动失败,可能是系统限制或宿主 App 不允许录音"); - [self kb_postFailed:tip]; -} - -- (void)stopRecording { - self.pendingStart = NO; - NSLog(@"[KBVoiceBridge][App] stopRecording"); - if (self.recorder.isRecording) { - [self.recorder stop]; - } -} - -#pragma mark - AVAudioRecorderDelegate - -- (void)audioRecorderDidFinishRecording:(AVAudioRecorder *)recorder successfully:(BOOL)flag { - [[AVAudioSession sharedInstance] setActive:NO error:nil]; - NSLog(@"[KBVoiceBridge][App] finishRecording flag=%d url=%@", flag, recorder.url); - NSURL *fileURL = recorder.url ?: self.recordURL; - self.recorder = nil; - self.recordURL = nil; - self.recording = NO; - - if (!flag || !fileURL) { - [self kb_postFailed:KBLocalized(@"录音失败")]; - return; - } - - [self kb_saveSharedFileURL:fileURL]; - [self kb_postDarwin:KBDarwinVoiceReady]; -} - -- (void)audioRecorderEncodeErrorDidOccur:(AVAudioRecorder *)recorder error:(NSError *)error { - [[AVAudioSession sharedInstance] setActive:NO error:nil]; - NSLog(@"[KBVoiceBridge][App] encodeError: %@", error.localizedDescription); - self.recorder = nil; - self.recordURL = nil; - self.recording = NO; - [self kb_postFailed:error.localizedDescription ?: KBLocalized(@"录音失败")]; -} - -#pragma mark - Helpers - -- (NSDictionary *)kb_voiceRecordSettingsAAC { - return @{AVFormatIDKey: @(kAudioFormatMPEG4AAC), - AVSampleRateKey: @(16000), - AVNumberOfChannelsKey: @(1), - AVEncoderAudioQualityKey: @(AVAudioQualityMedium)}; -} - -- (NSDictionary *)kb_voiceRecordSettingsPCM { - return @{AVFormatIDKey: @(kAudioFormatLinearPCM), - AVSampleRateKey: @(16000), - AVNumberOfChannelsKey: @(1), - AVLinearPCMBitDepthKey: @(16), - AVLinearPCMIsFloatKey: @(NO), - AVLinearPCMIsBigEndianKey: @(NO)}; -} - -- (NSURL *)kb_voiceFileURLWithExtension:(NSString *)ext { - NSURL *dirURL = [self kb_voiceDirectoryURL]; - if (!dirURL) { - return nil; - } - NSTimeInterval ts = [[NSDate date] timeIntervalSince1970] * 1000; - NSString *safeExt = (ext.length > 0) ? ext : @"m4a"; - NSString *fileName = [NSString stringWithFormat:@"kb_voice_%lld.%@", (long long)ts, safeExt]; - return [dirURL URLByAppendingPathComponent:fileName]; -} - -- (NSURL *)kb_voiceDirectoryURL { - NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:AppGroup]; - if (!containerURL) { - return nil; - } - NSURL *dirURL = [containerURL URLByAppendingPathComponent:@"voice" isDirectory:YES]; - if (dirURL && ![[NSFileManager defaultManager] fileExistsAtPath:dirURL.path]) { - [[NSFileManager defaultManager] createDirectoryAtURL:dirURL withIntermediateDirectories:YES attributes:nil error:nil]; - } - return dirURL; -} - -- (BOOL)kb_tryStartRecorderWithSettings:(NSDictionary *)settings fileURL:(NSURL *)fileURL error:(NSError **)error { - AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:fileURL settings:settings error:error]; - if (*error || !recorder) { - NSLog(@"[KBVoiceBridge][App] create recorder failed: %@", (*error).localizedDescription); - return NO; - } - recorder.delegate = self; - recorder.meteringEnabled = YES; - if (![recorder prepareToRecord]) { - NSLog(@"[KBVoiceBridge][App] prepareToRecord failed"); - return NO; - } - if (![recorder record]) { - NSLog(@"[KBVoiceBridge][App] record returned NO"); - return NO; - } - self.recorder = recorder; - return YES; -} - -- (NSUserDefaults *)kb_voiceUserDefaults { - return [[NSUserDefaults alloc] initWithSuiteName:AppGroup]; -} - -- (void)kb_clearSharedState { - NSUserDefaults *ud = [self kb_voiceUserDefaults]; - [ud removeObjectForKey:KBVoiceBridgeFilePathKey]; - [ud removeObjectForKey:KBVoiceBridgeErrorKey]; - [ud removeObjectForKey:KBVoiceBridgeTimestampKey]; - [ud synchronize]; -} - -- (void)kb_saveSharedFileURL:(NSURL *)fileURL { - if (!fileURL) { return; } - NSUserDefaults *ud = [self kb_voiceUserDefaults]; - [ud setObject:fileURL.path ?: @"" forKey:KBVoiceBridgeFilePathKey]; - [ud setObject:@([[NSDate date] timeIntervalSince1970]) forKey:KBVoiceBridgeTimestampKey]; - [ud removeObjectForKey:KBVoiceBridgeErrorKey]; - [ud synchronize]; -} - -- (void)kb_saveSharedError:(NSString *)message { - NSUserDefaults *ud = [self kb_voiceUserDefaults]; - [ud setObject:message ?: @"" forKey:KBVoiceBridgeErrorKey]; - [ud setObject:@([[NSDate date] timeIntervalSince1970]) forKey:KBVoiceBridgeTimestampKey]; - [ud removeObjectForKey:KBVoiceBridgeFilePathKey]; - [ud synchronize]; -} - -- (void)kb_postFailed:(NSString *)message { - [self kb_saveSharedError:message]; - [self kb_postDarwin:KBDarwinVoiceFailed]; - - if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) { - NSString *tip = message.length > 0 ? message : KBLocalized(@"录音失败"); - [KBHUD showInfo:tip]; - } -} - -- (void)kb_postDarwin:(NSString *)name { - CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), - (__bridge CFStringRef)name, - NULL, NULL, true); -} - -@end diff --git a/keyBoard.xcodeproj/project.pbxproj b/keyBoard.xcodeproj/project.pbxproj index 22a9f75..e0f39f2 100644 --- a/keyBoard.xcodeproj/project.pbxproj +++ b/keyBoard.xcodeproj/project.pbxproj @@ -221,9 +221,6 @@ A1B2C4002EB4A0A100000004 /* KBAuthManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C4002EB4A0A100000002 /* KBAuthManager.m */; }; A1B2C4202EB4B7A100000001 /* KBKeyboardPermissionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C4222EB4B7A100000001 /* KBKeyboardPermissionManager.m */; }; A1B2C4212EB4B7A100000001 /* KBKeyboardPermissionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C4222EB4B7A100000001 /* KBKeyboardPermissionManager.m */; }; - A1B2C5052F31001000000001 /* KBVoiceBridgeNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C5022F31001000000001 /* KBVoiceBridgeNotification.m */; }; - A1B2C5062F31001000000001 /* KBVoiceBridgeNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C5022F31001000000001 /* KBVoiceBridgeNotification.m */; }; - A1B2C5072F31001000000001 /* KBVoiceRecordManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C5042F31001000000001 /* KBVoiceRecordManager.m */; }; A1B2C9032FBD000100000001 /* KBBackspaceLongPressHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C9022FBD000100000001 /* KBBackspaceLongPressHandler.m */; }; A1B2C9052FBD000200000001 /* KBBackspaceUndoManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C9042FBD000200000001 /* KBBackspaceUndoManager.m */; }; A1B2C9092FBD000200000005 /* KBInputBufferManager.m in Sources */ = {isa = PBXBuildFile; fileRef = A1B2C9082FBD000200000004 /* KBInputBufferManager.m */; }; @@ -638,10 +635,6 @@ A1B2C4002EB4A0A100000002 /* KBAuthManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBAuthManager.m; sourceTree = ""; }; A1B2C4222EB4B7A100000001 /* KBKeyboardPermissionManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBKeyboardPermissionManager.m; sourceTree = ""; }; A1B2C4232EB4B7A100000001 /* KBKeyboardPermissionManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBKeyboardPermissionManager.h; sourceTree = ""; }; - A1B2C5012F31001000000001 /* KBVoiceBridgeNotification.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBVoiceBridgeNotification.h; sourceTree = ""; }; - A1B2C5022F31001000000001 /* KBVoiceBridgeNotification.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBVoiceBridgeNotification.m; sourceTree = ""; }; - A1B2C5032F31001000000001 /* KBVoiceRecordManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBVoiceRecordManager.h; sourceTree = ""; }; - A1B2C5042F31001000000001 /* KBVoiceRecordManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBVoiceRecordManager.m; sourceTree = ""; }; A1B2C9012FBD000100000001 /* KBBackspaceLongPressHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBBackspaceLongPressHandler.h; sourceTree = ""; }; A1B2C9022FBD000100000001 /* KBBackspaceLongPressHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBBackspaceLongPressHandler.m; sourceTree = ""; }; A1B2C9032FBD000200000001 /* KBBackspaceUndoManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBBackspaceUndoManager.h; sourceTree = ""; }; @@ -1671,10 +1664,6 @@ 0459D1B62EBA287900F2D189 /* KBSkinManager.m */, 049FB23D2EC4B6EF00FAB05D /* KBULBridgeNotification.h */, 049FB23E2EC4B6EF00FAB05D /* KBULBridgeNotification.m */, - A1B2C5012F31001000000001 /* KBVoiceBridgeNotification.h */, - A1B2C5022F31001000000001 /* KBVoiceBridgeNotification.m */, - A1B2C5032F31001000000001 /* KBVoiceRecordManager.h */, - A1B2C5042F31001000000001 /* KBVoiceRecordManager.m */, 04D1F6B02EDFF10A00B12345 /* KBSkinInstallBridge.h */, 04D1F6B12EDFF10A00B12345 /* KBSkinInstallBridge.m */, 04791F8C2ED469C0004E8522 /* KBHostAppLauncher.h */, @@ -1983,7 +1972,6 @@ A1B2C9052FBD000200000001 /* KBBackspaceUndoManager.m in Sources */, A1B2C9092FBD000200000005 /* KBInputBufferManager.m in Sources */, 049FB23F2EC4B6EF00FAB05D /* KBULBridgeNotification.m in Sources */, - A1B2C5052F31001000000001 /* KBVoiceBridgeNotification.m in Sources */, 04791F992ED49CE7004E8522 /* KBFont.m in Sources */, 04FC956D2EB054B7007BD342 /* KBKeyboardView.m in Sources */, 04FC95672EB0546C007BD342 /* KBKey.m in Sources */, @@ -2075,8 +2063,6 @@ 0477BDF72EBC63A80055D639 /* KBTestVC.m in Sources */, 04122F7E2EC5FC5500EF7AB3 /* KBJfPayCell.m in Sources */, 049FB2402EC4B6EF00FAB05D /* KBULBridgeNotification.m in Sources */, - A1B2C5062F31001000000001 /* KBVoiceBridgeNotification.m in Sources */, - A1B2C5072F31001000000001 /* KBVoiceRecordManager.m in Sources */, 04FC95C92EB1E4C9007BD342 /* BaseNavigationController.m in Sources */, 048908DD2EBF67EB00FABA60 /* KBSearchResultVC.m in Sources */, 05A1B2D12F5B1A2B3C4D5E60 /* KBSearchVM.m in Sources */, diff --git a/keyBoard/AppDelegate.m b/keyBoard/AppDelegate.m index 1d40b03..1645f78 100644 --- a/keyBoard/AppDelegate.m +++ b/keyBoard/AppDelegate.m @@ -25,7 +25,6 @@ #import "KBUserSessionManager.h" #import "KBLoginVC.h" #import "KBConfig.h" -#import "KBVoiceRecordManager.h" static NSTimeInterval const kKBSubscriptionPrefillTTL = 10 * 60.0; @@ -62,8 +61,6 @@ static NSTimeInterval const kKBSubscriptionPrefillTTL = 10 * 60.0; // 主工程默认开启网络总开关(键盘扩展仍需用户允许完全访问后再行开启) [KBNetworkManager shared].enabled = YES; - // 预热语音录制管理器(注册 Darwin 通知,响应键盘录音请求) - [KBVoiceRecordManager shared]; /// 获取网络权限 [self getNetJudge]; /// 触发一次简单网络请求,用于拉起系统的蜂窝数据权限弹窗 @@ -193,20 +190,7 @@ static NSTimeInterval const kKBSubscriptionPrefillTTL = 10 * 60.0; } else if ([host isEqualToString:@"settings"]) { // kbkeyboard://settings [self kb_openAppSettings]; return YES; - } else if ([host isEqualToString:@"voice"]) { // kbkeyboard://voice?action=start|stop - NSDictionary *params = [self kb_queryParametersFromURL:url]; - NSString *action = params[@"action"].lowercaseString; - NSLog(@"[KBVoiceBridge][App] openURL voice action=%@", action); - if ([action isEqualToString:@"start"]) { - [[KBVoiceRecordManager shared] startRecording]; - return YES; - } - if ([action isEqualToString:@"stop"]) { - [[KBVoiceRecordManager shared] stopRecording]; - return YES; - } - return YES; - }else if ([host isEqualToString:@"recharge"]) { // kbkeyboard://recharge + } else if ([host isEqualToString:@"recharge"]) { // kbkeyboard://recharge NSDictionary *params = [self kb_queryParametersFromURL:url]; NSString *productId = params[@"productId"]; BOOL autoPay = NO;