不logging时隐藏iOS应用程序中的红色录制状态栏

当应用程序在后台而不logging时,我无法将红色“录制”状态栏隐藏在我的应用程序中。

在这里输入图像说明

我碰巧使用了惊人的audio引擎 ,但我认为这个问题可以解决这个库的知识。 它得到这样的设置:

audioController = [[AEAudioController alloc] initWithAudioDescription:desc inputEnabled:YES]; audioController.audioSessionCategory = kAudioSessionCategory_MediaPlayback; 

当用户想要录制时,我打开这个麦克风:

 [audioController addInputReceiver:mic]; audioController.audioSessionCategory = kAudioSessionCategory_PlayAndRecord; 

当用户想要停止录制时,我将其closures:

 [audioController removeInputReceiver:mic]; audioController.audioSessionCategory = kAudioSessionCategory_MediaPlayback; 

问题是,当应用程序没有logging和用户离开应用程序,红色的“录制”状态栏仍然显示。 我无法停止/configurationaudioController,因为应用程序可能仍在播放audio。

如果我不录制,我不想让红色录制状态栏显示。 任何想法如何做到这一点?

更新

我设置了以下代码块,每隔2秒在我的应用程序中运行。

 audioController.audioSessionCategory = kAudioSessionCategory_MediaPlayback; AVAudioSession *audioSession = [AVAudioSession sharedInstance]; NSError* error = nil; [audioSession setActive:NO error: &error]; NSLog(@"error: %@", error); [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil]; 

这logging:

 TAAE: Setting audio session category to MediaPlayback AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryEnableBluetoothInput) result 2003329396 77686174 what Error Domain=NSOSStatusErrorDomain Code=560030580 "The operation couldn't be completed. (OSStatus error 560030580.)" 

很明显,由于TAAE所持有的东西,它不能禁用麦克风。 我没有添加任何input到控制器,所以我不知道它可能是什么。

已解决,请参阅编辑2

只要话筒正在使用,录音与否,酒吧将永远不会消失。 这是一种安全措施,允许用户知道应用程序正在聆听麦克风,而不是显示手机正在录制。

消除这个问题的唯一方法是从input接收器中取出麦克风

我看到你的麦克风没有被移除,必须有一些错误。

要点是,只要麦克风打开,您就不能隐藏红条。

如果你想暂时禁用它,你可以尝试这可能吗?

 [audioController setInputEnabled:NO] 

你究竟想完成什么? 可能有更好的办法来处理事情

编辑1:添加了其他解决方法

我不知道setInputEnabled是只读的,对不起。

那么,另一个尝试是完全停止控制器,试试这个:

 [audioController stop] 

如果不是,请尝试释放它,如果你不使用ARC,或者干脆

 audioController = Nil; 

希望解决这个问题。 但我宁愿试图找出为什么它不是从input接收器删除mic ..也许mic是零当你调用[audioController removeInputReceiver:mic]

编辑2:添加解决scheme

当初始化inputEnabled设置为YES ,问题就出现了,因为它是readOnly ,不能禁用input,唯一的方法是实际释放audioController 。 如果你使用的是ARC,只要把它设置为[audioController release] ,如果没有,只是[audioController release]

尝试在停止录制时closuresaudio服务 :

 AudioSessionSetActive(false); 

我解决了这个问题:

  • 有两个audio控制器(如评论中所build议的):一个用于logging,另一个用于回放。 当应用程序进入后台,我调用[recordAudioController stop] ,当我想再次开始录制时,我重新启动了这个audio控制器。
  • AEAudioController.m中删除一行试图停止audio会话的代码,使得TAAE只停止AUGraph

     - (void)stopInternal { NSLog(@"TAAE: Stopping Engine"); checkResult(AUGraphStop(_audioGraph), "AUGraphStop"); if ( self.running ) { // Ensure top IO unit is stopped (AUGraphStop may fail to stop it) checkResult(AudioOutputUnitStop(_ioAudioUnit), "AudioOutputUnitStop"); } // --- I removed the following section --- if ( !_interrupted ) { NSError *error = nil; if ( ![((AVAudioSession*)[AVAudioSession sharedInstance]) setActive:NO error:&error] ) { NSLog(@"TAAE: Couldn't deactivate audio session: %@", error); } } processPendingMessagesOnRealtimeThread(self); if ( _pollThread ) { [_pollThread cancel]; while ( [_pollThread isExecuting] ) { [NSThread sleepForTimeInterval:0.01]; } _pollThread = nil; } } 

我知道这个问题有点老了,但如果别人遇到像我这样的问题,我就给了我最后的解决办法。 问题发生在这样的logging情况:

  1. 开始录制

[session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];

  1. 停止录制

[session setCategory:AVAudioSessionCategoryPlayback error:&error];

当我注释代码重置会话类别回放时,问题消失。 我也将开始logging代码更改为:

[session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];

使接收机播放的语音播放到扬声器。