Я пытаюсь воспроизвести звук через динамик на устройстве Android (Huawei), но нет звука, я перепробовал много способов - PullRequest
1 голос
/ 16 января 2020

Я испробовал три метода, коды показаны ниже.

В первом методе используется 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" />

Эти методы, похоже, хорошо работают для других, я не уверен, что это был телефон, надеюсь, кто-то может мне помочь!

1 Ответ

0 голосов
/ 17 января 2020

ОК, это хорошо работает с другим телефоном, я думаю, что могут быть некоторые неисправности в оригинальном телефоне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...