Tôi đã cố gắng tìm ra những gì thực sự xảy ra trong nhiều tuần và tôi không biết tại sao tôi không thể tiếp tục phát lại sau khi bị gián đoạn, vì vậy có lẽ các bạn biết câu trả lời. AudioSessionSetActive (TRUE) luôn trả về '! Cat' là kAudioSessionIncompatibleCategory trong khi kích hoạt lại nếu ứng dụng của tôi phát ở chế độ nền và tôi đang ở trong ứng dụng khác. Mặc dù nó hoạt động tốt và tiếp tục phát lại nếu tôi bị gián đoạn khi đang ở trong ứng dụng của mình.AudioSessionSetActive không thành công sau khi bị gián đoạn
Mã gốc thực sự có tất cả các cuộc gọi AudioSession và AudioQueue được bao bọc trong các macro in OSStatus nếu nó có nghĩa là lỗi, nhưng tôi đã xóa nó để dễ đọc hơn. Ngoài ra, [tự tạm dừng] chỉ cần tắt tạm dừng, vì vậy về cơ bản nó gọi AudioQueueStart (audioQueue, NULL) trên upause nhưng nó không hoạt động ofcourse nếu AudioSession thất bại.
âm thanh đang phiên khởi tạo:
AudioSessionInitialize(NULL, NULL, _audioSessionInterruptionListener, self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, _audioSessionPropertyListener, self);
AudioSessionSetActive(TRUE);
gián đoạn mã xử lý:
- (void)handleInterruptionChangeToState:(AudioQueuePropertyID)inInterruptionState
{
if(inInterruptionState == kAudioSessionBeginInterruption)
{
NSLog(@"+Interruption");
if(self.state == NX_STATE_PLAY)
{
[self pause];
AudioSessionSetActive(FALSE);
isPausedByInterruption = YES;
}
}
else if(inInterruptionState == kAudioSessionEndInterruption)
{
if(isPausedByInterruption)
{
AudioSessionSetActive(TRUE);
[self pause];
isPausedByInterruption = FALSE;
}
NSLog(@"-Interruption");
}
}
mã nguồn streamer này có thể được tìm thấy ở đây https://bitbucket.org/and/amaudiostreamer/src/122de41fe6c0/AMAudioStreamer/AMAudioStreamer/Classes/NxAudioStreamer.m nếu nó sẽ giúp đỡ bằng cách nào đó để giải quyết một vấn đề ..
Như bạn mong đợi, nó không hoạt động và mang lại cho tôi cùng một lỗi theo cách thời trang hơn: "Không đặt được danh mục trên AVAudioSession. Không thể hoàn tất thao tác. (OSStatus error 560161140.)". Tôi sẽ cố gắng phân tích rioInterruptionListener .. Tôi nghĩ rằng tôi chỉ bỏ lỡ một số điều nhỏ nhặt. – Andy
sau đó tôi tin rằng trước tiên bạn phải cố gắng điều trong câu trả lời câu hỏi của tôi. Nhưng ở đây sẽ có quá khó khăn để có được vấn đề chính xác. Bạn cần phải xác định nơi 'chính xác' bạn muốn sửa đổi mã. đây là một thách thức đối với tôi khi tôi đã làm ... Tốt nhất của may mắn cho bạn ... Hy vọng bạn sẽ có thể giải quyết vấn đề ... – DShah