Я пытаюсь воспроизвести звук через динамик вызовов в Android с помощью mediaPlayer
, но он всегда звучит во внешнем динамике. Вот код, который я использую для изменения места воспроизведения звука.
try {
mediaPlayer.reset();
mediaPlayer.setDataSource(tmp_audio_file.getPath());
} catch (IOException e) {
e.printStackTrace();
}
AudioAttributes attributes;
if (event.sensor.getType() == Sensor.TYPE_PROXIMITY) {
AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
if (event.values[0] >= -SENSOR_SENSITIVITY && event.values[0] <= SENSOR_SENSITIVITY) {
// Speak in the internal speaker
Toast.makeText(getApplicationContext(), "near", Toast.LENGTH_SHORT).show();
// audioManager.setMode(AudioManager.STREAM_VOICE_CALL);
attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
this.mediaPlayer.setAudioAttributes(attributes);
} else {
// Speak in the external speaker
Toast.makeText(getApplicationContext(), "far", Toast.LENGTH_SHORT).show();
// audioManager.setMode(AudioManager.MODE_NORMAL);
attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build();
this.mediaPlayer.setAudioAttributes(attributes);
}
}
if (this.play) {
try {
mediaPlayer.prepare();
mediaPlayer.start();
Toast.makeText(getApplicationContext(), "playing", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
Цель приложения - SDK 28, поэтому mp.setAudioStreamType(AudioManager.STREAM_VOICE_CALL)
также не работает.
Как правильно настроить динамик для воспроизведения звука?