【发布时间】:2013-02-22 06:18:44
【问题描述】:
我一直在努力学习 AVAudioPlayer 及其行为。
所以我先写了
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
player.numberOfLoops = -1;
[player play];
只要应用程序没有进入后台,它确实运行良好。于是我再次搜索,发现我需要在plist中添加条目并且还写了以下代码
NSError *activationError = nil;
if([[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&activationError] == NO)
NSLog(@"*** %@ ***", activationError);
[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
现在我的示例应用程序也在后台播放声音。然后我遇到了另一个问题。如果我在所有这些处理之前放置睡眠,则在睡眠期间将我的应用程序置于后台并开始从其他应用程序播放音乐,在这种情况下,我的应用程序无法播放声音。这可能是因为它没有获得其他音乐应用程序所占用的音频会话。
问题
1. 我知道有一种方法可以检测是否有任何其他声音正在播放,但我找不到如何停止它。有一些方法可以停止像 iPod 这样的标准应用程序声音,但是否有任何通用方法可以停止任何其他应用程序的声音。
2. [player play]; 给出NO 作为失败的结果。我如何找到失败的原因。我已经实现了audioPlayerDecodeErrorDidOccur:error: 方法,但它从未被调用过。
请分享您对此的了解。我已经解决了大多数关于相同问题的堆栈溢出问题,但没有发现任何对这个特定问题有用的东西。
【问题讨论】:
-
请打印您的 soundFileURL
-
@Manohar :使用以下代码获取 URL
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"mp3"]; NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];它确实有效,直到应用程序处于后台并且没有其他内容正在播放。所以我认为 URL 在这里没有任何问题。 -
NSURL *soundFileURL = [NSURL URLWithString: soundFilePath];试试这个
-
@Manohar :不......同样的问题没有变化
标签: iphone ios avaudioplayer avaudiosession background-music