如何在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程序上以后台模式关闭音乐?的主要内容,如果未能解决你的问题,请参考以下文章