2012-09-12 2 views
1

iPhone의 응용 프로그램을 작성하여 오디오 미리 알림 시퀀스를 재생하고 다른 응용 프로그램에서 생성 된 소리와 좋은 대화를 나누고 싶습니다.백그라운드에서 소리 미리 알림 시퀀스 재생하기 다른 소리로 음악을 일시 중지하고 멈추지 않음

보다 구체적으로 다음 요점을 달성하고 싶습니다.
1. 10 초마다 알림을 재생하십시오. (이것은 질문을 단순화하는 것입니다, 내 애플 리케이션에 미리 알림을 재생할시기를 지정하는 시간 순서가 있습니다)
2. 사운드는 백그라운드에서 작동해야합니다.
3. 음악 재생이 일시 중지 된 경우 내 응용 프로그램에서 오디오 미리 알림을 생성 한 다음 음악을 다시 시작해야합니다.
4. 다른 응용 프로그램에서 소리가 나기 시작하면 미리 알림 시퀀스가 ​​계속 작동해야합니다 (예 : 음악 시작 또는 응용 프로그램 실행 후 전화 수신).

아래 코드를 사용하면 1과 2를 달성 할 수있었습니다. 그러나 3과 4를 동시에 달성하는 방법을 알 수 없습니다.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    audioSession = [AVAudioSession sharedInstance]; 
} 

// Following function is used to start reproducing sounds and also called 
// for the next sounds 
- (IBAction)soundPlayShort:(id)sender 
{ 
    NSURL * url = @"reminder sound url here"; 

    // soundPlayer is defined in .h file as AVAudioPlayer 
    if (soundPlayer == nil) { 
     // initialize soundPlayer 
     soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
     soundPlayer.delegate = self; 
    } 
    [soundPlayer playAtTime:soundPlayer.deviceCurrentTime + 10]; 
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];  
} 

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{ 
    [self soundPlayShort:self]; 
} 

나는 아래의 코드와 같이 audioPlayerDidFinishPlaying을 업데이트하는 경우, 다른 소리 (점 3) 재개,하지만 내 순서에서 다음 알림

- (void)restoreOtherSounds 
{ 
    [audioSession setActive:NO 
     withFlags:AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation error:nil]; 
} 

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{ 

    [self restoreOtherSounds]; 
    [self soundPlayShort:self]; 
} 
(2 가리 키도록 관련) 더 이상 호출되지 않습니다

그리고 미리 알림 시퀀스를 다시 시작하는 방법을 깨닫지 못했습니다. 전화가 왔을 때. (요점 4)

조차 부분 응답은 저를 위해 아주 도움이 될 수있었습니다. 미리 감사드립니다. (2)를 가리 키도록 관련

답변

0

는 soundPlayShort에 AVAudioPlayer을 초기화하기 전에 활성으로 오디오 세션을 설정하십시오 :

[[AVAudioSession sharedInstance] setActive:YES error:nil];

관련 문제