2016-10-07 82 views
2

在某些Android設備上嘗試在耳機上播放音頻文件時似乎存在問題。預期的行爲是它應該播放耳機中的音頻文件,但是在Samsung Galaxy Note 2(Android 4.4.2)和Sony Xperia XA(Android 6.0)等設備中,通過揚聲器播放音頻文件。Android - 某些設備無法通過耳機播放音頻

但是在像摩托羅拉moto g(android版本6.0)和nexus 5X(android版本7.0)的設備中,它工作正常。

該應用程序還具有android.permission.MODIFY_AUDIO_SETTINGS權限。

請在下面找到此問題的詳細信息。

播放音頻之前,我設置以下屬性:

audioManager = (AudioManager)configService.getContext().getSystemService(Context.AUDIO_SERVICE); 
audioManager.setSpeakerphoneOn(isEnabled); 
player = new MediaPlayer(); 
player.setAudioStreamType(AudioManager.STREAM_VOICE_CALL); 
player.setDataSource(path); 

我已經嘗試設置模式MODE_IN_CALL,但沒有工作,要麼:從其他 audioManager.setMode(android.media.AudioManager.MODE_IN_CALL);

我也曾嘗試解決方案帖子提出類似的問題,但他們沒有多大幫助。

這將有助於瞭解此問題是否與設備相關以及如何解決該問題。 感謝您的幫助。

回答

2

最後我找到了解決方案。當在BroadcastReceiver中註冊ACTION_HEADSET_PLUG意圖時,它正在爲從過去事件中保存的耳機未插電事件廣播粘性意圖。這導致迴音只通過揚聲器播放音頻。

請參考下面的堆棧溢出後進一步的細節:link

要解決這個問題,我用isInitialStickyBroadcast()方法來過濾掉過去的事件。

public void onReceive(Context context, Intent intent) { 
    switch (intent.getIntExtra("state", -1)) { 
     case 0: 
      if (!isInitialStickyBroadcast()) { 
       // headset unplugged 
      } 
      break; 
     case 1: 
      // headset plugged in 
      break; 
     default: 
      break; 
    } 
} 
0

我一直在使用ACTION_HEADSET_PLUG但與通過耳機上的一些設備6.0 +播放聲音同樣的問題。我的解決方案是使用版本高於LOLLIPOP的設備使用​​:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { 
     AudioAttributes mAttributes = new AudioAttributes.Builder() 
       .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) 
       .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION) 
       .build(); 
     mMediaPlayer = MediaPlayer.create(this, R.raw.connection, mAttributes, 1); 
    } else { 
     mMediaPlayer = MediaPlayer.create(this, R.raw.connection); 
    } 
相關問題