2016-10-07 8 views
2

Похоже, что существует проблема при воспроизведении аудиофайлов на наушниках на некоторых устройствах Android. Ожидаемое поведение - это воспроизведение аудиофайла в наушниках, но в некоторых устройствах, таких как Samsung Galaxy Note 2 (Android версии 4.4.2) и Sony Xperia XA (Android версии 6.0), они воспроизводят их через динамики.Android - некоторые устройства не воспроизводят звук через наушники

Однако в таких устройствах, как Motorola moto g (android version 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

Наконец-то я нашел решение. При регистрации для намерения ACTION_HEADSET_PLUG в BroadcastReceiver, он транслировал липкие намерения о отключении гарнитуры, которое было сохранено в прошлом событии. Это вызывало обратный вызов, который воспроизводил звук только через динамик.

Обратитесь к следующей стека переполнения пост для получения более подробной информации: 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 +. Мое решение состоит в том, чтобы использовать AudioAttributes для устройств с версией выше 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); 
    } 

 Смежные вопросы

  • Нет связанных вопросов^_^