• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iOS 9 检测静音模式

[复制链接]
菜鸟教程小白 发表于 2022-12-13 15:21:42 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我一直在寻找很长一段时间,在这里发布作为放弃前的最后尝试。 我想检测我当前是否处于静音模式。

我找到了一种解决方法(播放假声音并检查完成),但仅在我未处于 AVAudioSessionCategoryPlayAndRecord 模式时才能正常工作。 这正是在一个屏幕上,我可以在其中录制我想要实现的音频和视频,以便知道我是否应该播放 UI 声音。

总而言之,我试图找到一种在 AVAudioSessionCategoryPlayAndRecord 模式下检测静音模式的方法。



Best Answer-推荐答案


这是一个尝试通过将 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap