Я испробовал три метода, коды показаны ниже.
В первом методе используется AudioManager.MODE_IN_COMMUNICATION
.
// method one
AudioManager audioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
MediaPlayer mediaPlayer = new MediaPlayer();
AssetFileDescriptor fileDescriptor = getAssets().openFd("signal.wav");
mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),
fileDescriptor.getStartOffset(),
fileDescriptor.getLength());
audioManager.setSpeakerphoneOn(false);
audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL,
audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL),
AudioManager.FX_KEY_CLICK);
mediaPlayer.prepare();
mediaPlayer.start();
Во втором методе AudioAttributes используется с AudioAttributes.CONTENT_TYPE_SPEECH и AudioAttributes.USAGE_VOICE_COMMUNICATION.
// method two
AudioAttributes mAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
.setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
.build();
MediaPlayer mediaPlayer = new MediaPlayer();
AssetFileDescriptor fileDescriptor = getAssets().openFd("signal.wav");
mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),
fileDescriptor.getStartOffset(),
fileDescriptor.getLength());
mediaPlayer.prepare();
mediaPlayer.start();
В методе три ExoPlayer
используется для воспроизведения звука, настройка немного похожа на метод два, возможно, вы можете проигнорировать этот метод.
// method three
Uri uri = Uri.fromFile(new File("//android_asset/signal.wav"));
SimpleExoPlayer player = new SimpleExoPlayer.Builder(this).build();
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "MyCamera"));
MediaSource Source = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
player.prepare(Source);
player.setPlayWhenReady(true);
player.setAudioAttributes(new AudioAttributes.Builder()
.setContentType(earpiece ? C.CONTENT_TYPE_SPEECH : C.CONTENT_TYPE_MUSIC)
.setUsage(earpiece ? C.USAGE_VOICE_COMMUNICATION : C.USAGE_MEDIA)
.build());
Кстати, я устанавливаю разрешение в AndroidManifest.xml
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
Эти методы, похоже, хорошо работают для других, я не уверен, что это был телефон, надеюсь, кто-то может мне помочь!