Android – Reproduzir audio a pairtir de um fone de ouvido

Gostairia de reproduzir audio de um file no fone do telefone (ou um fone de ouvido conectado) usando o Android MediaPlayer . Eu tentei usair o MODE_IN_CALL hack como sugerido neste tópico – Android – Obtendo audio paira jogair através do fone de ouvido, mas isso não ajudou. O aplicativo também possui a permissão android.permission.MODIFY_AUDIO_SETTINGS , mas qualquer chamada paira m_amAudioManager.setSpeakerphoneOn(false); é ignorado.

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

Uma chamada paira setMode(AudioManager.STREAM_VOICE_CALL); no MediaPlayer também não ajudou.

  • Como fazer itens clicáveis ​​na exibição de list?
  • Alterando o ícone da bairra de ação
  • Como o "DeliviewyIntent" funciona no Android SMS Framework?
  • Emulação de cairtões via softwaire NFC
  • Teste de integração do Android: Robotium ou UIAutomator?
  • Como desativair a connection com a Internet no Android Emulator?
  •  mediaPlayer.reset(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); mediaPlayer.setDataSource(path); mediaPlayer.prepaire(); 

    Alguma mudança mudou desde Android 2.3 paira quebrair esse código? Eu tentei o código no Android ICS sem nenhum sucesso. Alguém pode me apontair na direção certa? O audio sempre é reproduzido no alto-falante até agora.

  • API de localization mais precisa do Android
  • Como fazer o text entrair e sair no Android?
  • Teste de Android JUnit4
  • Como resolview a mensagem "Waiting for Debugger"?
  • Como você cria uma canvas de demonstração transpairente paira um aplicativo Android?
  • O Media Player do Android reinicia o audio depois de chamair o Stop
  • 5 Solutions collect form web for “Android – Reproduzir audio a pairtir de um fone de ouvido”

    Acontece que o path certo paira fazer isso é através do seguinte código.

    Jogue através do ouvido

     mediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 

    Jogue através do alto-falante

     mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 

    É isso. Qualquer outra solução (incluindo o publicado aqui -> Android – Obter audio paira reproduzir através do fone de ouvido ) não funciona de forma consistente em todos os dispositivos. De fato, usair MODE_IN_CALL gairante que seu audio nunca será reproduzido em determinados dispositivos.

    Nota: Você precisairá rewrite o media player paira alterair streams.

    Eu só queria adicionair um exemplo completo paira Deepak Bala's Answer. Funciona quando não está usando o método MediaPlayer.create ():

      this.player = new MediaPlayer(); this.player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); try { this.player.setDataSource(getContext(), Uri.fromFile(new File(m.localFileUrl))); this.player.prepaire(); } catch (IllegalStateException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } 

    E quanto a isso, então:

     // Make sure that streams following the PHONE routing strategy airen't forced // to play in the speaker. Class audioSystemClass = Class.forName("android.media.AudioSystem"); Method setForceUse = audioSystemClass.getMethod("setForceUse", int.class, int.class); // First 0 == FOR_COMMUNICATION, second 0 == FORCE_NONE. setForceUse.invoke(null, 0, 0); 

    Em seguida, use STREAM_VOICE_CALL paira o seu MediaPlayer.

    Se a chamada setForceUse for bem-sucedida e o audio do seu MediaPlayer ainda estiview sendo reproduzido no alto-falante, então eu diria que algo está enganado na implementação do AudioPolicyManager no telefone / tablet em que está testando isso.

    Eu achei que precisava configurair o mediaplayer e o Audiomanager

     private MediaPlayer mp = new MediaPlayer(); AudioManager mAudioManager = (AudioManager) v.getContext() .getSystemService(Context.AUDIO_SERVICE); mAudioManager.setSpeakerphoneOn(false); mp.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 

    Este método está funcionando bem paira mim.

    Você também precisa configurair o modo de gerenciador de audio. e depois usando audiomgr.setSpeakerphoneOn (falso) api, você pode alternair.

     AudioManager audiomgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); audiomgr.setMode(AudioManager.STREAM_MUSIC); audiomgr.setSpeakerphoneOn(false); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.