【问题标题】:Finding out what song is playing in Music.app找出 Music.app 中正在播放的歌曲
【发布时间】:2014-09-05 03:00:37
【问题描述】:

在 iOS 上,我的应用程序是否有办法找出音乐应用程序中当前正在播放的歌曲?例如,如果他们在使用我的应用程序时在后台播放一首歌曲,我可以获取有关该歌曲的信息吗?如果可以的话,有没有办法让我的应用程序在新歌开始播放时收到某种通知?谢谢!

【问题讨论】:

    标签: ios objective-c cocoa-touch ios7


    【解决方案1】:

    有可能获得这样的一些信息:(还有许多其他 MPMediaItemProperties)就问题中的第二个问题而言,我认为当您的应用程序处于后台状态时这是不可能的。

    编辑:也许您可以根据需要在后台每隔 xx 秒调用一次此代码,然后比较这些值以查看音乐是否确实改变了您自己。请注意,尽管您的应用在后台运行的时间有限,但在此时间过后,您将无法获得更新后的值。

    #import <MediaPlayer/MediaPlayer.h>
    
    @property (nonatomic, strong) MPMediaItem *lastItem;
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    
        NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:20.0 target:self selector:@selector(checkIfSongChanged) userInfo:nil repeats:YES];
        [timer fire];
    }
    
    - (void)checkIfSongChanged
    {
        if ([[MPMusicPlayerController iPodMusicPlayer] playbackState] == MPMusicPlaybackStatePlaying)
        {
            MPMediaItem *nowPlayingMediaItem =
            [[MPMusicPlayerController iPodMusicPlayer] nowPlayingItem];
    
            if (self.lastItem && nowPlayingMediaItem != self.lastItem)
            {
                NSLog(@"New media item is: %@",nowPlayingMediaItem);
            }
    
            self.lastItem = nowPlayingMediaItem;
    
            NSLog(@"Media item is: %@,",nowPlayingMediaItem);
        }
    }
    

    AppDelegate.m:

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        UIBackgroundTaskIdentifier __block task = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^
        {
            [[UIApplication sharedApplication] endBackgroundTask:task];
            task = UIBackgroundTaskInvalid;
        }];
    }
    

    【讨论】:

    • 谢谢!这帮助很大!
    猜你喜欢
    • 2012-01-18
    • 2015-04-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多