【问题标题】:Detecting if music is playing?检测是否正在播放音乐?
【发布时间】:2023-08-14 22:01:01
【问题描述】:

我的应用程序涉及音乐(iPodMusic),并且有一个 UISwitch 切换播放/暂停。我的目标是能够检测音乐是否正在播放,因此播放/暂停开关可以在播放音乐时说“播放”,如果不是,则“暂停”。

【问题讨论】:

    标签: iphone uiswitch audio-player


    【解决方案1】:
    if ([[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying) ...
    

    【讨论】:

    • 如果您希望您的应用程序在用户启动 iPod 应用程序时停止发出自己的噪音,这也很有用。例如,如果您正在编写游戏,而您自己的游戏内音乐与尝试玩自己的游戏的用户发生冲突。
    • 由于 iOS 8.0 弃用了 MPMusicControlleriPodMusicPlayer 方法,必须修复此问题:将其换成 systemMusicPlayer
    【解决方案2】:

    如果音乐来自您自己的应用,请查看AVAudioPlayer's playing property

    如果音乐来自 iPod,请检查 MPMusicPlayerController's nowPlayingItemplaybackState 属性。

    【讨论】:

      【解决方案3】:

      MPMusicPlayerController 仅适用于 OS 3.0 或更高版本。如果你运行的是 2.0,那你就不走运了。这是一个代码 sn-p,它检查您是否正在运行 3.0 或更高版本,然后才尝试创建 MPMuiscPlayerController

      bool playerDetectedAndPlaying = false;
      NSString *reqSysVer = @"3.0";
      NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
      if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending){
          Class MusicPlayerController = NSClassFromString(@"MPMusicPlayerController");
          if (MusicPlayerController){         
              id myMusicPlayerController = [[MusicPlayerController alloc]init];
              id MusicPlayer = [[myMusicPlayerController class] iPodMusicPlayer ];
              if ( [ MusicPlayer playbackState ] == MPMusicPlaybackStatePlaying ) {
                  playerDetectedAndPlaying = true;
              }
          }
      }
      

      您必须针对 3.0 SDK 进行编译,但如果您将部署目标设置为 2.0,此代码仍可在旧设备上运行。

      【讨论】:

        【解决方案4】:

        如果您的 iTunes 声音已打开,则为“是”,如果 iTunes 音乐播放器关闭,则为“否”...因此您可以轻松检查默认的 MusicPlayer 声音是打开还是关闭您需要添加媒体播放器框架只是试试吧,它会正常工作的......谢谢......:)

           if ([[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying)
            {
                   NSLog(@"yes itune Player Sound is on");
            }
            else
            {
                  NSLog(@"NO itune Player Sound is not on");
            }
        

        【讨论】: