Android Exoplayer: getAudioComponent является нулевым - PullRequest
0 голосов
/ 01 ноября 2019

Я транслирую аудио с exoplayer, и мне нужна кнопка для отключения и включения звука.

Я использую следующие зависимости:

implementation 'com.google.android.exoplayer:exoplayer-core:2.10.5'
implementation 'com.google.android.exoplayer:exoplayer-dash:2.10.5'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.10.5'

Код инициализации проигрывателя:

private void initializePlayer() {
        player = ExoPlayerFactory.newSimpleInstance(context);
        playerView.setPlayer(player);
        playerView.setControllerHideOnTouch(false);
        playerView.setControllerShowTimeoutMs(0);
        Uri uri = Uri.parse(mediaUrl);

        MediaSource mediaSource = buildMediaSource(uri);

        player.addListener(playbackStateListener);
        player.setPlayWhenReady(playWhenReady);
        player.seekTo(currentWindow, playbackPosition);
        player.prepare(mediaSource, false, false);

    }  

buildMediaSource:

private MediaSource buildMediaSource(Uri uri) {
        DataSource.Factory dataSourceFactory =
                new DefaultDataSourceFactory(context, "exoplayer-codelab");
        return new ProgressiveMediaSource.Factory(dataSourceFactory)
                .createMediaSource(uri);
    }

Вот как я пытаюсь отключить и включить звук:

    float currentAudioLevel = player.getAudioComponent().getVolume();
            mute.setOnClickListener(view -> {
                    if(!muteAudio) {
                        Objects.requireNonNull(player.getAudioComponent()).setVolume(0);
                        mute.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.ic_volume_off));
                        muteAudio = true;
                    }else{
                        Objects.requireNonNull(player.getAudioComponent()).setVolume(currentAudioLevel);
                        mute.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.ic_volume_on));
                        muteAudio = false;
                    }
            });

getAudioComponent выдает исключение нулевого указателя:

 Attempt to invoke interface method 
   'com.google.android.exoplayer2.Player$AudioComponent 
    com.google.android.exoplayer2.Player.getAudioComponent()' on a null object reference

Звук воспроизводится правильно, все элементы управления работают, но я не могу получить или установить громкость.

1 Ответ

0 голосов
/ 01 ноября 2019

Просто используйте player.setVolume(0.0f);

Я рекомендую сначала получить текущий объем, а затем отключить его. Когда вы включите звук, вы можете дать пользователю ту же громкость.

float currentvolume;
currentvolume = player.getVolume();
player.setVolume(0.0f);
...