ben*_*ree 14 audio objective-c ios avaudiosession
当应用程序在后台并且没有录制时,我无法将红色"录制"状态栏隐藏在我的应用程序中.
我碰巧使用了The Amazing Audio Engine,但我认为这个问题可以解决这个库的问题.它设置如下:
audioController = [[AEAudioController alloc] initWithAudioDescription:desc inputEnabled:YES];
audioController.audioSessionCategory = kAudioSessionCategory_MediaPlayback;
Run Code Online (Sandbox Code Playgroud)
当用户想要录制时,我打开麦克风就像这样:
[audioController addInputReceiver:mic];
audioController.audioSessionCategory = kAudioSessionCategory_PlayAndRecord;
Run Code Online (Sandbox Code Playgroud)
当用户想要停止录制时,我将其关闭:
[audioController removeInputReceiver:mic];
audioController.audioSessionCategory = kAudioSessionCategory_MediaPlayback;
Run Code Online (Sandbox Code Playgroud)
问题是,当应用程序未录制且用户离开应用程序时,红色的"录制"状态栏仍会显示.我无法停止/处置audioController,因为应用程序可能仍在播放音频.
如果我没有录制,我不希望红色录制状态栏显示.任何想法如何做到这一点?
我设置了以下代码块,在我的应用程序中每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];
Run Code Online (Sandbox Code Playgroud)
这个日志:
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.)"
Run Code Online (Sandbox Code Playgroud)
显然,由于TAAE持有的东西,它无法禁用麦克风.我没有向控制器添加任何输入,所以我不知道它可能是什么.
已解决,参见编辑2
只要麦克风在使用,无论是否录音,该条都不会消失。这是一种安全措施,让用户知道应用程序正在监听麦克风,而不是显示手机正在录音。
解决这个问题的唯一方法是从输入接收器上取下麦克风
我发现你的麦克风没有被移除,一定有什么错误。
重点是,只要麦克风打开,您就无法隐藏红条。
如果你想暂时禁用它,你可以尝试这个吗?
[audioController setInputEnabled:NO]
Run Code Online (Sandbox Code Playgroud)
无论如何,你想实现什么目标?可能有更好的方法来处理事情
编辑1:添加其他解决方法
我不知道 setInputEnabled 是只读的,抱歉。
好吧,另一件事要尝试的是完全停止控制器,试试这个:
[audioController stop]
Run Code Online (Sandbox Code Playgroud)
如果没有,如果您不使用 ARC,请尝试释放它,或者只是
audioController = Nil;
Run Code Online (Sandbox Code Playgroud)
希望能解决这个问题。但我宁愿尝试找出为什么它没有mic
从输入接收器中删除..也许mic
当你打电话时是 Nil [audioController removeInputReceiver:mic]
??
编辑2:添加解决方案
inputEnabled
当您使用set to进行初始化时,就会出现问题YES
,因为它是readOnly
,因此您无法禁用输入,唯一的方法是实际释放audioController
。如果您使用 ARC,只需将其设置为Nil
,如果没有,则只需[audioController release]