2013-01-18 16 views
7

Tôi đang sử dụng AudioTrack để phát âm thanh tôi nhận được thông qua ổ cắm UDP. Tôi đang nhận được rất nhiều tiếng ồn cùng với âm thanh vì vậy tôi quyết định sử dụng AudioManager. Nhưng AudioManager thay đổi định tuyến âm thanh vượt quá giới hạn của ứng dụng. Dưới đây là mã tôi đang sử dụng.Sử dụng AudioTrack với bộ AudioManagerĐiện thoại thông minhOn

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

Sự cố với mã này là khi tôi đóng ứng dụng và khởi động Trình phát nhạc, âm thanh phát ra từ loa trước và không phải loa sau lưng và tôi không thể thay đổi bằng cách nào đó. Để giải quyết vấn đề này, tôi quyết định thêm dòng sau khi tôi đóng ứng dụng của mình.

m_amAudioManager.setSpeakerphoneOn(true); 

Nhưng với dòng này, vấn đề là khi tôi nhận cuộc gọi (cuộc gọi bình thường), theo mặc định, loa được bật. Tôi thực sự cần giúp đỡ về điều này.

Trả lời

12

Trước tiên, bạn cần khai báo quyền người dùng MODIFY_AUDIO_SETTINGS trong tệp kê khai để thay đổi cài đặt AudioManager.

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
  1. Trước khi bạn thay đổi bất kỳ cài đặt, bạn phải lưu các thiết lập AudioManager hiện tại!

    oldAudioMode = audioManager.getMode(); 
    oldRingerMode = audioManager.getRingerMode(); 
    isSpeakerPhoneOn = audioManager.isSpeakerphoneOn(); 
    
  2. Áp dụng cài đặt của bạn Audio (Ví dụ)

    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
    audioManager.setMode(AudioManager.MODE_NORMAL); 
    audioManager.setSpeakerphoneOn(true); 
    
  3. Sau đó, lớp sơn hoàn thiện, khôi phục cài đặt

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

Cảm ơn rất nhiều vì đã trả lời. Tôi đã sử dụng quyền này. Và đã khắc phục được một trong những vấn đề của tôi. Loa không còn được bật theo mặc định. Nhưng với đoạn mã này, tôi đã thử chạy trình phát nhạc và nó bắt đầu chạy trên loa phía trước. Bất kỳ ý tưởng làm thế nào để thay đổi đó để mặc định? – SoH

+0

Giá trị mặc định là cài đặt do người dùng thiết bị đặt trước khi anh ta khởi động ứng dụng của bạn. Vấn đề là khôi phục cài đặt AudioManager về trạng thái là trước khi bạn thay đổi nó. Vì vậy, nếu speakerPhone tắt trước khi ứng dụng của bạn bắt đầu, nó sẽ tắt khi ứng dụng của bạn dừng. – TouchBoarder

+0

@hsigmond có ổn không nếu chúng ta thay đổi chế độ sau khi bắt đầu AudioTrack? – onmyway133

1

Set này khi đóng ứng dụng.

m_amAudioManager.setMode (AudioManager.MODE_NORMAL);