2013-01-18 16 views
7

UDP soketleri üzerinden aldığım sesi çalmak için AudioTrack kullanıyorum. Ses ile birlikte çok fazla ses alıyorum, bu yüzden AudioManager'ı kullanmaya karar verdim. Ancak AudioManager, ses aktarımını uygulamanın sınırlarının ötesine değiştirir. Kullanmakta olduğum kod aşağıdadır.AudioTrack'ı AudioManager setSpeakerphoneOn ile kullanın

 m_amAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     m_amAudioManager.setMode(AudioManager.MODE_IN_CALL); 
     m_amAudioManager.setSpeakerphoneOn(false); 

bu kodla Sorun app kapatın ve Müzik Player başlattığınızda, ses ön hoparlör ve olağan arka hoparlörden geliyor ve bir şekilde bunu değiştiremezsiniz olmasıdır. Bu sorunu çözmek için, uygulamanızı kapattığımda aşağıdaki satırı eklememeye karar verdim.

m_amAudioManager.setSpeakerphoneOn(true); 

Ama sorun bir çağrı (normal arama) aldığınızda, varsayılan olarak hoparlör açık olduğunu bu hattı ile

. Bu konuda yardıma ihtiyacım var lütfen.

cevap

12

İlk önce, AudioManager ayarlarını değiştirdiğinizde, MODIFY_AUDIO_SETTINGS kullanıcı iznini bildirmeniz gerekir. Eğer herhangi bir ayarı değiştirmeden önce

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
  1. , geçerli AudioManager ayarları kaydetmek gerekir! Sonra bitirmek üzerine

    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
    audioManager.setMode(AudioManager.MODE_NORMAL); 
    audioManager.setSpeakerphoneOn(true); 
    
  2. oldAudioMode = audioManager.getMode(); 
    oldRingerMode = audioManager.getRingerMode(); 
    isSpeakerPhoneOn = audioManager.isSpeakerphoneOn(); 
    
  3. uygula senin Ses ayarları (Örnek), uygulamayı kapatırken bu ayarla ayarları

    audioManager.setSpeakerphoneOn(isSpeakerPhoneOn); 
    audioManager.setMode(oldAudioMode); 
    audioManager.setRingerMode(oldRingerMode); 
    
+0

Cevabınız için çok teşekkürler. Bu izni kullandım. Ve sorunlarımdan birini çözdüm. Hoparlör artık varsayılan olarak açık değil. Fakat bu kodla müzik çaları çalıştırmayı denedim ve ön hoparlörde çalışmaya başladı. Bunu varsayılan olarak nasıl değiştirebilirim? – SoH

+0

Varsayılan değer, uygulamayı başlatmadan önce Cihazın kullanıcısı tarafından ayarlanan ayardır. Buradaki nokta, AudioManager Ayarını geri yüklemek, değiştirmeden önce durumdaydı. Bu yüzden, uygulamanız başlamadan önce speakerPhone kapalıysa, uygulamanız durduğunda kapanır. AudioTrack başlatıldıktan sonra modu değiştirirsek – TouchBoarder

+0

@hsigmond olur mu? – onmyway133

1

geri yükleme.

m_amAudioManager.setMode (AudioManager.MODE_NORMAL);

İlgili konular