Android以编程方式设置扬声器

我试图在编程方式中使用audiomanager.setSpeakerphoneOn(true)在一个服务中调用扬声器,但它似乎不工作,我不知道为什么。 我应该做点什么吗?

谢谢

  • ADT插件中的android模拟器没有运行
  • 如何禁用AlertDialog上的系统音效?
  • AudioFlinger(59):RecordThread:Activity暂停时缓冲区溢出?
  • 不可能使用MediaMuxer混合audio文件和video文件?
  • Androidaudio延迟解决方法
  • 在左右扬声器上播放2个不同的audiostream
  • AudioRecord和AudioTrack延迟
  • 获取Android中的可用铃声列表
  • 检查你的清单文件是否有权限执行此操作。

    我认为这是你需要的权限MODIFY_AUDIO_SETTINGS

    在android 4.1及更高版本中,当您拨打电话时,电话会自动closures扬声器电话。 所以你需要做的就是在收听者的耳机上加上扬声器,这个收听者在状态为“摘机”的时候收听正在进行的呼叫,甚至延迟0.5秒来打开扬声器:

     final Handler mHandler = new Handler(); mHandler.postDelayed(new Runnable() { @Override public void run() { audioManager.setMode(AudioManager.MODE_IN_CALL); audioManager.setSpeakerphoneOn(true); MainActivity.shouldTurnSpeakerOn = false; MainActivity.shouldTurnSpeakerOff = true; Log.d("incoming_call","speaker_on"); } }, 500); 

    请记住将其添加到电话状态监听器。 并且当状态为空闲(在早期版本中需要)时运行扬声器电话。

    祝你好运。