2015-07-14 19 views
18

Tiêu đề của câu hỏi có thể trông lặp lại, nhưng vấn đề của tôi đôi khi là vấn đề và gây ra trục trặc. Tôi đã sử dụng mã dưới đây để chơi qua loa khi tai nghe được cắm vàoLàm thế nào để phát âm thanh qua loa ngay cả khi tai nghe được cắm vào?

AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); 

     audioManager.setMode(AudioManager.STREAM_MUSIC); 
     audioManager.setSpeakerphoneOn(true); 

     if(! Globals.mediaPlayer.isPlaying()){ 
      Globals.mediaPlayer.start(); 
     } 

Đoạn mã trên vai âm thanh trong các cách sau:. 1. Rất ít lần, nó đóng một cách hoàn hảo. 2. Hầu hết các lần, nó chơi với một âm thanh lặp lại trong nền. 3. Vài lần, nó không chơi bất cứ thứ gì.

Có vẻ như hệ thống phát âm thanh không có lỗi khi tai nghe được cắm vào. Ví dụ - cài đặt nhạc chuông phát nhạc chuông tương ứng chính xác mà không bị lỗi. Hãy giúp tôi hiểu cách tôi có thể phát âm thanh chính xác thông qua loa có tai nghe được cắm.

Trả lời

10

Sau khi làm việc trên nó một chút (có thể nhiều hơn thế), tôi đã tìm ra giải pháp cho nó.

Thay vì thay đổi cài đặt của AudioManager, chúng ta nên tạo trường hợp MediaPlayer của riêng mình và đặt loại luồng âm thanh cho trường hợp đó. Chúng ta có thể đặt nó thành STREAM_RING để định tuyến âm thanh tới tai nghe và loa.

player.reset(); 
    player.setAudioStreamType(AudioManager.STREAM_RING); 
    try { 
     player.setDataSource(context, uri); 
     player.prepareAsync();} 

Sau đó, bạn có thể nghe onPreparedListener để bắt đầu âm thanh. Vui lòng kiểm tra blog Route audio through speaker in Android để có hình ảnh tốt hơn.

10

Tôi gặp sự cố tương tự như đã giải quyết, tạo trình phát đa phương tiện mới nếu nó không phát và đặt loại luồng trình phát media cùng chế độ của người quản lý âm thanh, hãy thử với một cái gì đó như thế này:

AudioManager audioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE); 
audioManager.setMode(AudioManager.STREAM_MUSIC); 
audioManager.setSpeakerphoneOn(true); 

if(! Globals.mediaPlayer.isPlaying()){ 
    MediaPlayer mp = MediaPlayer.create(....); 
    mp.setAudioStreamType(AudioManager.STREAM_MUSIC); 
    mp.start(); 
} 

trong trường hợp của tôi, tôi đã sử dụng AudioManager.MODE_IN_COMMUNICATION. Ngoài ra hãy chắc chắn để thiết lập sự cho phép

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

trong AndroidManifest.xml

+1

Tốt hơn, chúng ta không nên gọi setMode() vì nó gây trở ngại cho điện thoại Android. Chúng tôi có thể đặt loại luồng âm thanh thành STREAM_RING để phát âm thanh ở cả loa và tai nghe. –

+0

'audioManager.setSpeakerphoneOn (true);' đây là những gì tôi đang tìm kiếm. cảm ơn – okarakose

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