2014-10-16 17 views
11

Bir BroadcastReceiver (telefon devlet dinleyici) aşağıdaki kodu kullanıyorum engeller. Çağrı bağlantısı kesildiğinde, ben hoparlörü kapatın:kullanma AudioManager hoparlörü etkinleştirmek için çağrı ses

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
audioManager.setMode(AudioManager.MODE_NORMAL); 
audioManager.setSpeakerphoneOn(false); 

Bu, tüm iyi çalışması için ... ilk kez görünüyor. Daha sonra, telefonumun ses akışları karışıklığa karışmış gibi görünüyor. Sonraki aramalar garip sessizdir, hatta benim app kodunun dışından yapılan çağrılar (yukarıdaki ayarların tetiklenmediği). Ses dosyalarını rastgele görebiliyorum, ama neyin geri döneceğine emin değilim.

Neyi yanlış yaptığım hakkında bir fikriniz var mı? Farkında olmadığım bir Android hatası var mı? Sonraki aramalar için sesimi susturmayı nasıl engelleyebilirim?

DÜZENLEME: Galaxy S4 üzerinde test yapıyorum.

cevap

2

değiştirilmesi aslında olup olmadığını bilmek yararlı olacaktır. Benim ses yukarı beceriyormuş kod satırı oldu görünüyor: Ben onsuz başarıyla yapmaya hoparlör ayarı alamadım çünkü bu yöntemi kullanan

audioManager.setMode(AudioManager.MODE_IN_CALL); 

(I modunu ayarlamak için bir öneride bulundu Başka bir Yığın Taşması cevabı ... çalıştı, ama sorunlu sonuçları vardı).

Tek yapmam gereken bu satırı kaldırmak ve işleyici gecikmesini 500 ile 2000 arasında artırmaktı.

Ayrıca, AudioManager'a this answer'da önerildiği gibi statik bir başvuruda bulundum. Bu özel durumda gerekli görünmüyor, ama üzgün olmaktan daha güvenli.

1

, ben sadece hesap içine yaşıyorsanız emin olmak için, setmode arasında documentation bu metni kopyalar Öncelikle: sistemine sadece une uygulama ile oynuyor gereken başka deyişle

The audio mode encompasses audio routing AND the behavior of the telephony layer. 
Therefore this method should only be used by applications that replace the platform-wide 
management of audio settings or the main telephony application 

bu tür yöntemler. Aksi takdirde, tutarlılık sağlanamaz.

Daha sonra bunlardan bazılarının çok düşük olması durumunda farklı ses akışlarınızı kontrol ederim (STREAM_VOICE_CALL, STREAM_SYSTEM, STREAM_RING, STREAM_MUSIC veya STREAM_ALARM). Ve belki setSpeakerphoneOn yerine setStreamMute kullanmayı deneyin.

sizin uygulama bu sorunu çözmüş the platform-wide management of audio settings or the main telephony application

+0

Cevabınız için teşekkür ederiz. Kendi problemimi çözdüğümde, cevabınız beni doğru yönde teşvik etti. Aferin. –

İlgili konular