我目前正試圖實現一個系統,如鬧鐘,當事件發生時(在我的情況下是藍牙事件)提醒手機。即使手機處於靜音和背景中,我也希望發生此警報。iOS - 無法在背景中播放聲音
我創建了一個本地通知,但如果手機處於靜音模式(這似乎是正常現象,因爲我們將手機置於靜音狀態),我無法播放聲音。
所以我試圖自己管理聲音,我很努力地在後臺播放聲音。到目前爲止,我實施了「應用程序播放音頻或使用AirPlay流音頻/視頻」鍵在我的plist中,並使用此代碼。
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *error = nil;
BOOL result = [audioSession setActive:YES error:&error];
if (! result && error) {
NSLog(@"Error For AudioSession Activation: %@", error);
}
error = nil;
result = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];
if (! result && error) {
NSLog(@"Error For AudioSession Category: %@", error);
}
if (player == nil) {
NSString *path = [[NSBundle mainBundle] pathForResource:@"bell" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *err = nil;
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err];
if(err)
{
NSLog(@"Error Player == %@", err);
}
else {
NSLog(@"Play ready");
}
}
[player prepareToPlay];
[player setVolume:1.0];
if([player play])
{
NSLog(@"YAY sound");
}
else {
NSLog(@"Error sound");
}
即使在靜音模式下,聲音在前景效果很好,但我在背景中根本沒有聲音。有任何想法嗎 ?
感謝
編輯: 最後我得到它與上面的代碼工作。唯一缺少的一點是,當我在藍牙事件中正確播放聲音時,我試圖播放聲音有點像另一個線程,而不是我的函數調用它的工作。
你有沒有試過用'applicationDidEnterBackground:'方法? –
當應用程序在後臺執行某些長操作(如保存)時調用此方法。在我的情況下,通知可能會很長時間後(但我的應用程序可以執行一些操作,因爲它是一個藍牙事件) –