我一直在寻找很长一段时间,在这里发布作为放弃前的最后尝试。 我想检测我当前是否处于静音模式。
我找到了一种解决方法(播放假声音并检查完成),但仅在我未处于 AVAudioSessionCategoryPlayAndRecord
模式时才能正常工作。
这正是在一个屏幕上,我可以在其中录制我想要实现的音频和视频,以便知道我是否应该播放 UI 声音。
总而言之,我试图找到一种在 AVAudioSessionCategoryPlayAndRecord
模式下检测静音模式的方法。
这是一个尝试通过将 Audio Session 类别短暂切换到 SoloAmbient(尊重静音开关的类别)来读取开关的解决方案 - 读取开关 - 然后切换回来。这可能是最适合您的方法。
如果交换 Audio Session 类别会干扰您的应用程序,我建议您在播放音频之前进行检查并使用您检测到的值,然后对静音开关使用react。这是一种解决方法,但它应该为您提供一些信息。
切换到环境类别,确定静音开关是否打开,然后将 session 切换回我需要的音频设置。您需要确定所需的 Audio Session 类别,并在确定开关是否打开后切换到该类别。
-(BOOL)muteSwitchEnabled {
#if TARGET_IPHONE_SIMULATOR
// set to NO in simulator. Code causes crashes for some reason.
return NO;
#endif
// switch to Ambient to detect the switch
AVAudioSession* sharedSession = [AVAudioSession sharedInstance];
[sharedSession setCategory:AVAudioSessionCategoryAmbient error:nil];
CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
BOOL muteSwitch = (CFStringGetLength(state) <= 0);
NSLog(@"Mute switch: %d",muteSwitch);
// code below here is just restoring my own audio state, YMMV
_hasMicrophone = [sharedSession inputIsAvailable];
NSError* setCategoryError = nil;
if (_hasMicrophone) {
[sharedSession setCategory: AVAudioSessionCategoryPlayAndRecord error: &setCategoryError];
// By default PlayAndRecord plays out over the internal speaker. We want the external speakers, thanks.
UInt32 ASRoute = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,
sizeof (ASRoute),m&ASRoute);
} else {
// Devices with no mic don't support PlayAndRecord - we don't get playback, so use just playback as we don't have a microphone anyway
[sharedSession setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError];
if (setCategoryError) {
NSLog(@"Error setting audio category! %@", setCategoryError);
}
return muteSwitch;
}
}
关于iOS 9 检测静音模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36008063/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) | Powered by Discuz! X3.4 |