菜鸟教程小白 发表于 2022-12-13 15:21:42

iOS 9 检测静音模式


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

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

<p>总而言之,我试图找到一种在 <code>AVAudioSessionCategoryPlayAndRecord</code> 模式下检测静音模式的方法。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>这是一个尝试通过将 Audio Session 类别短暂切换到 SoloAmbient(尊重静音开关的类别)来读取开关的解决方案 - 读取开关 - 然后切换回来。这可能是最适合您的方法。</p>

<p>如果交换 Audio Session 类别会干扰您的应用程序,我建议您在播放音频之前进行检查并使用您检测到的值,然后对静音开关使用react。这是一种解决方法,但它应该为您提供一些信息。 </p>

<p>切换到环境类别,确定静音开关是否打开,然后将 session 切换回我需要的音频设置。您需要确定所需的 Audio Session 类别,并在确定开关是否打开后切换到该类别。 </p>

<pre><code>-(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 = ;
    ;

    CFStringRef state;
    UInt32 propertySize = sizeof(CFStringRef);
    AudioSessionInitialize(NULL, NULL, NULL, NULL);
    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &amp;propertySize, &amp;state);

    BOOL muteSwitch = (CFStringGetLength(state) &lt;= 0);
    NSLog(@&#34;Mute switch: %d&#34;,muteSwitch);

    // code below here is just restoring my own audio state, YMMV
    _hasMicrophone = ;
    NSError* setCategoryError = nil;

    if (_hasMicrophone) {

      ;

      // 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&amp;ASRoute);
    } else {
      // Devices with no mic don&#39;t support PlayAndRecord - we don&#39;t get playback, so use just playback as we don&#39;t have a microphone anyway
      ;

      if (setCategoryError) {
            NSLog(@&#34;Error setting audio category! %@&#34;, setCategoryError);
      }
      return muteSwitch;
    }
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于iOS 9 检测静音模式,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/36008063/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/36008063/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: iOS 9 检测静音模式