如何在IOS程序上以后台模式关闭音乐?

Posted

技术标签:

【中文标题】如何在IOS程序上以后台模式关闭音乐?【英文标题】:How to shut down the music in background mode on IOS program? 【发布时间】:2012-12-17 01:49:10 【问题描述】:

我制作了一个 ios 程序来使用 AVAudioPlayer 在后台播放音乐。但我不知道如何在一段时间后关闭音乐。 我尝试使用UILocalNotification停止音乐的方法:

- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notification

但是这种方式只有在用户收到通知点击关闭后才有效!

如何在一定时间后自动停止音乐?

【问题讨论】:

【参考方案1】:

如果您使用 AVPlayer 而不是 AVAudioPlayer,您可以使用 addBoundaryTimeObserverForTimes:queue:usingBlock: 实现此目的

我已经用 AVQueuePlayer(它是 AVPlayer 的一个子类)尝试过这个,它成功了。

试试这样的:

id observer = [avPlayer addBoundaryTimeObserverForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:CMTimeMake(60, 1)]] queue:NULL usingBlock:^
        [avPlayer pause];
    ];

然后在某个地方:

[avPlayer removeTimeObserver:observer];

【讨论】:

非常感谢!顺便说一句,我喜欢它!但是 AVQueuePlayer 可以循环播放吗? 我建议注册AVPlayerItemDidPlayToEndTimeNotification,然后重新启动歌曲,或者重新排队。但我没有在后台这样做,所以我不确定。请告诉我您是否成功或遇到更多问题。祝你好运! 不错的答案。比我的好多了!如果可以的话,我会给你两次投票。【参考方案2】:

我很想被证明是错误的,但我相信你要求做的事情可能是不可能的。我的印象是,如果用户真的点击 Home 按钮将你的应用程序发送到后台,它就不能作为“睡眠定时器”,因为你不能运行定时器。苹果自己的应用程序可以做这种事情,但他们有特权。

例如,看看这个应用程序:

https://itunes.apple.com/us/app/music-sleep-timer/id320583424?mt=8

看看他是怎么说的,“记得把这个应用程序放在前台!”显然这是因为一旦应用程序处于后台,计时器就会停止工作。

建议用户使用 Apple 时钟应用程序中的倒数计时器可能会更好。它可以关闭您的音乐并使设备进入睡眠状态。

【讨论】:

感谢您的帮助!但实际上已经有很多应用程序已经实现了该功能!例如itunes.apple.com/cn/app/super-hypnotist/…或itunes.apple.com/cn/app/qq-yin-le/id414603431?l=en&mt=8所以我认为必须有一种方法来解决问题 嗯,有办法通过诡计达到同样的效果。假设您有一个 30 分钟的音乐文件。而你只想玩 10 分钟。然后,您可以使用 iOS 的编辑功能创建一个仅包含该文件前十分钟的新音乐文件。因此它开始播放,用户将您置于后台,如果文件结束,音乐停止(并且您的应用暂停,因为它不再播放)。 这是一种方式!但是如果文件只有 10 分钟,我想在 30 分钟后重复播放,那就是我的困惑! 同样,您可以创建一个包含此文件的队列 3 次。 谢谢!你的方式可以解决我的问题,但我认为使用 AVAudioPlayer 并运行 [avPlayer addBoundaryTimeObserverForTimes:[NSArray arrayWithObject:[NSValue valueWithCMTime:CMTimeMake(60, 1)]] queue:NULL usingBlock:^ [avPlayer pause];];方法更好!

以上是关于如何在IOS程序上以后台模式关闭音乐?的主要内容,如果未能解决你的问题,请参考以下文章

IOS后台运行 之 后台播放音乐

IOS如何在后台播放音乐声音并暂停当前播放的音乐应用程序

iOS:如何在我的音乐应用程序中播放蓝牙耳机中的缓冲音频?

如何在 iOS 后台使用相机

当我在我的应用程序中录制完整的音频时,如何在其他 iOS 应用程序中继续播放音乐? [关闭]

iOS + Swift,如何访问所有音乐文件 [关闭]