Uygulama arka planda olduğunda sanal araç uygulamamın (bir MIDI klavye aracılığıyla) kullanılabilmesini sağlamak istiyorum. Bu, UIBackgroundModes'i "audio" olarak ayarlayarak ve AudioSessions'ın kategorisini AVAudioSessionCategoryPlayback'e ayarlayarak iyi çalışır. Ayrıca, Müzik çalar uygulaması ile karıştırmaya izin vermek için, kAudioSessionProperty_OverrideCategoryMixWithOthers özelliğini ayarlayın.kAudioSessionProperty_OverrideCategoryMixWithOthers kullanımı
Pil enerjisinden tasarruf etmek için, kullanıcının gerekmiyorsa arka plan çalışmasını kapatması önerilir. Yani benim app AVAudioSessionCategoryAmbient ve AVAudioSessionCategoryPlayback kategorisi (kAudioSessionProperty_OverrideCategoryMixWithOthers ile) arasında geçiş yapmak için bir anahtar var. kodu (hata ihmal sokulması) şu şekildedir:
NSString *category = supportsBackgroundOperation ? AVAudioSessionCategoryPlayback : AVAudioSessionCategoryAmbient;
[session setCategory:category error:nil];
if (category == AVAudioSessionCategoryPlayback) {
UInt32 allowMixing = true;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);
}
Şimdi sorun: Müzik Uygulama arka planda oynuyor varsayalım. Kullanıcı, müzik çalara eşlik etmek için sanal enstrümanı (MIDI klavyesi aracılığıyla) çalıyor ve başka bir uygulamayı başlatmaya karar veriyor, enstrümanın neden oynatılmasının tadını çıkarmak için bir slayt gösterisi söyleyin. Böylece, uygulamamın ayarlar görünümüne gider ve arka plan çalışmasını etkinleştirir. Daha sonra yukarıdaki kod çalıştırılır. Boom, Müzik uygulaması sessizleşiyor. Anladığım kadarıyla, kAudioSessionProperty_OverrideCategoryMixWithOthers özelliği, kategorisini ayarladıktan sonra
olarak ayarlanabiliyor, ancak kategoriyi AVAudioSessionCategoryPlayback olarak ayarladığımda, kAudioSessionProperty_OverrideCategoryMixWithOthers öğesini ayarlama şansım olmadan önce müzik çalar sistem tarafından susturuluyor. Bu oldu mu? Bir şey yapılabilir mi? Kategoriyi değiştirmeden önce/sonra oturumu devre dışı bırakmaya/etkinleştirmeye çalıştım, ancak bu başka sorunlara yol açtı.
Markus
mı? Belgelere göre: Parametreler beTaktif Uygulamanızın ses oturumunu aktif hale getirmek için YES veya bunu devre dışı bırakmak için HAYIR'ı kullanın. ' http://developer.apple.com/library/ios/#documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference.html Yoksa bir şey mi eksik? – Marc
Ses oturumunu devre dışı bırakmak için önce AIP'yi ayarlamak için NO'yu geçiyorum, ardından özelliği değiştirin ve ses oturumunu tekrar etkinleştirmek için EVET'i setActive'a geçirin. –
Yardımlarınız için teşekkürler ve yanıtımın geç kaldığı için üzgünüm. Aynı problemle başka bir uygulamada (farklı bir ses kategorisi olan AVAudioSessionCategoryPlayAndRecord ile) karşılaştım.Bunun nedeni, oturumu nasıl yapılandırdığım ve etkinleştirdiğim değil, oturum özelliklerini ayarlamadan önce ses grafiğini başlattığım gerçeğiydi. Oturum özelliklerini ilk olarak ayarladığımda (diğerleri ile karıştırın), ses grafiğini oluşturup, daha sonra oturumun etkinliğini ayarladıktan sonra diğer uygulamaların sesi kapatılmaz. – masi