以编程方式从外部或内部扬声器播放声音

Posted

技术标签:

【中文标题】以编程方式从外部或内部扬声器播放声音【英文标题】:Play sound either from external or internal speaker programmatically 【发布时间】:2016-05-17 15:44:32 【问题描述】:

假设我有一个正在播放音乐的 MediaPlayer 类对象。现在我想将音乐更改为从设备的内置扬声器或已插入耳机中播放。

假设只需点击一个按钮。这可能吗?

【问题讨论】:

how to turn speaker on/off programatically in android 4.0的可能重复 @Michael 谢谢。我一直在关注你的每一个与场景相似的答案。我期待着你的回答。再次感谢你。我现在可以打扰你了。提前抱歉。让我检查一下爱德华给出的建议之一。 :-) 【参考方案1】:

我没有足够的声誉,无法发表评论,所以我会发布它。

只需快速搜索一下:Switching between earpiece and speaker

import android.media.MediaPlayer;
import android.media.AudioManager;

public class MediaPlayer 
   private MediaPlayer mMediaPlayer;
   private AudioManager mAudioManager;
   private Button mButton;
   private boolean isPlayingOnSpeaker = false;

   @Override
   protected void onCreate(Bundle savedInstanceState) 
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      ...

      mMediaPlayer = MediaPlayer.create(this, R.raw.song);
      mMediaPlayer.prepareAsync();
      mMediaPlayer.start();

      mButton = (Button) findViewById(R.id.button);

      mButton.setOnClickListener(new View.OnClickListener() 
      @Override
         public void onClick(View v) 
            context = getActivity().getBaseContext();

            mAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);        
            mAudioManager.setMode(AudioManager.STREAM_MUSIC);

            if(isPlayingOnSpeaker)
               mAudioManager.setSpeakerphoneOn(false); isPlayingOnSpeaker=false;
            else mAudioManager.setSpeakerphoneOn(true); isPlayingOnSpeaker=true;
         
      

      ...
   

【讨论】:

如果这行得通,您将获得足够的声誉以备将来使用。 :-) 我会把它作为评论发布,但我不能因为我没有足够的声誉,我想我会尝试为它编写一些代码。

以上是关于以编程方式从外部或内部扬声器播放声音的主要内容,如果未能解决你的问题,请参考以下文章

我将如何以编程方式捕获内部音频?

C++ 中的简单声音

如何在 vb.Net 中通过外部扬声器播放声音?

iPhone 7 顶部和底部扬声器之间的平移声音

iOS - 在录制视频时播放音频/声音

从扬声器 android 播放声音