2012-01-09 63 views
8

Chúng tôi đã xây dựng ứng dụng hướng âm nhạc của chúng tôi bằng html5 và javascript với Sencha touch. Đối với phân phối chúng tôi gói nó trong xcode với UIwebView. Mọi thứ đều chạy tốt ngoại trừ một thứ không hoạt động: âm thanh phát ở chế độ đa nhiệm.Tiếp tục phát âm thanh từ trình phát html5 khi ở chế độ nền iOS

Tôi biết ý tưởng chung: thêm UIBackgroundModes vào info.plist.

Xong. Bây giờ chúng ta có thể phát âm thanh ngay cả ở chế độ nền.

Cho đến khi chúng tôi kết thúc bài hát. Để bắt đầu bài hát tiếp theo, chúng tôi phải đưa ứng dụng lên nền trước hoặc chúng tôi có thể nhấn nút phát hoặc nút 'bài hát tiếp theo' trên bộ điều khiển âm thanh iPhone.

Sau khi một số nghiên cứu tôi tìm thấy cách giải quyết đầy hứa hẹn tại: "Entering background on iOS4 to play audio" nơi giải pháp thay thế là chỉnh sửa AVAudioSessionCategoryPlayback và làm việc với UIBackgroundTaskIdentifier. Vấn đề đối với tôi là (giống như trong bất kỳ sửa chữa nào khác mà tôi đã tìm thấy cho đến nay) rằng các giải pháp đó luôn cho rằng âm thanh được phát bằng AVaudioPlayer hoặc MPMusicPlayerController. Nhưng trong trường hợp của tôi, tôi không sử dụng, âm thanh của chúng tôi được chơi bởi trình phát html5 của chúng tôi được bao bọc trong UIwebView.

Bất kỳ ai có lời khuyên nào về cách tiếp tục phát âm thanh ở chế độ đa nhiệm iOS khi trình phát âm thanh là trình phát html5/javascript?

Trả lời

1

Cảm ơn, các bạn, nhưng tôi đã kết thúc việc đơn giản là giữ ứng dụng bận trong vòng lặp khi ở chế độ nền. Điều này đủ để kết nối thời gian khi kết nối với bài hát tiếp theo trong danh sách phát. Mã tôi đã sử dụng tương tự như mã này: iPhone - Backgrounding to poll for events

4

Ứng dụng của tôi phát âm thanh qua thẻ <audio> trong html được lưu trữ trong UIWebView và nó hỗ trợ phát trong nền.

Như bạn đề xuất, bạn cần phải có chế độ nền 'Phát âm thanh ứng dụng' được xác định trong plist của bạn.

Hãy thử thêm này để xử lý applicationDidFinishLaunching: của bạn:

NSError *setCategoryError = nil; 
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError]; 
0

Bạn có thể thử this, thêm một chức năng trên các sự kiện onend.

Các vấn đề liên quan