Как определить, когда Google Maps говорит в Android - PullRequest
0 голосов
/ 07 февраля 2019

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

Я добавил следующий код (показанный ниже) в свое приложение.Прослушиватель фокусировки звука вызывается, когда такие приложения, как Pandora Radio или Spotify, запрашивают фокусировку звука для воспроизведения музыки, но не вызывается, когда карты Google объявляют направление за поворотом.Есть ли еще какое-то намерение, которого я должен слушать, чтобы обнаружить это поведение?

 AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    audioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN)
            .setAudioAttributes(
                    new AudioAttributes.Builder()
                            .setUsage(AudioAttributes.USAGE_MEDIA)
                            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                            .build()
            )
            .setAcceptsDelayedFocusGain(true)
            .setOnAudioFocusChangeListener(new AudioManager.OnAudioFocusChangeListener() {
                @Override
                public void onAudioFocusChange(int focusChange) {
                    // This is called by Pandora Radio and Spotify
                    Log.d("Focus change:", " Event is: " + focusChange);
                }
            }).build());

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Вам потребуются AudioManager AudioPlaybackCallback обновления.

Это работает только на Android O и выше.

Для этого вам нужно получить доступ к аудио-менеджеру -

 AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);

И затем добавить слушателя следующим образом -

Handler handler = new Handler();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    audioManager.registerAudioPlaybackCallback(new AudioManager.AudioPlaybackCallback() {
        @Override
        public void onPlaybackConfigChanged(List<AudioPlaybackConfiguration> configs) {
             super.onPlaybackConfigChanged(configs);
            // This will be called when navigation audio state on google maps changes
            Log.d("audio active", String.valueOf(audioManager.isMusicActive()));
        }
    }, handler);
}

Возвращенный в обратном вызове List<AudioPlaybackConfiguration> configs имеет объект AudioAttribute, который содержит строку, описывающую воспроизводимое аудио.Для навигации по картам Google значение константы String равно USAGE_ASSISTANCE_NAVIGATION_GUIDANCE, которое вы можете сравнить, чтобы убедиться, что это Google Maps объявляет направление навигации.

Программно вы можете получить его следующим образом

// Loop through the configs to see the media's usage data
configs.get(0).getAudioAttributes().getUsage();
0 голосов
/ 16 февраля 2019
@Override
    public void onAudioFocusChange(int focusChange) {
        switch (focusChange) {
            case AudioManager.AUDIOFOCUS_GAIN:
                if (mPlayOnAudioFocus && !isPlaying()) {
                    play();
                } else if (isPlaying()) {
                    setVolume(MEDIA_VOLUME_DEFAULT);
                }
                mPlayOnAudioFocus = false;
                break;
            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
                setVolume(MEDIA_VOLUME_DUCK);
                break;
            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                if (isPlaying()) {
                    mPlayOnAudioFocus = true;
                    pause();
                }
                break;
            case AudioManager.AUDIOFOCUS_LOSS:
                mAudioManager.abandonAudioFocus(this);
                mPlayOnAudioFocus = false;
                stop();
                break;
        }
    }
}

Следующий фрагмент кода содержит реализацию этого интерфейса для приложения, воспроизводящего аудио.И он справляется с дакингом для временной потери фокуса звука.Он также обрабатывает изменение фокуса аудио из-за того, что пользователь приостанавливает воспроизведение, по сравнению с другим приложением (например, Google Assistant), вызывающим кратковременную потерю фокуса аудио

делает ли ваше приложение временно нужным аудио фокус (с опцией «уклоняться»), так как оноНужно воспроизвести звуковое уведомление или устное направление разговора, или необходимо записать аудио от пользователя в течение короткого периода времени?Это

AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK.

Уклонение от паузы при временной потере фокуса звука Вы можете приостановить воспроизведение или временно уменьшить громкость звука.воспроизведение в OnAudioFocusChangeListener, в зависимости от того, какой UX должен предоставить ваше приложение.Android O поддерживает автоматическую настройку, при которой система автоматически уменьшает громкость вашего приложения, без необходимости писать дополнительный код.В вашем OnAudioFocusChangeListener просто проигнорируйте событие AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK.

В Android N и более ранних версиях вы должны реализовать себя как приглушенный (как показано в фрагменте кода выше).

для подробного посещения: https://medium.com/androiddevelopers/audio-focus-3-cdc09da9c122

AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK добавлено на уровне API 8 public static final int AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK Используется для указания временного запроса аудио-фокуса, ожидаемого на короткий промежуток времени, и в тех случаях, когда он приемлем для другихзвуковые приложения, чтобы продолжить воспроизведение после понижения их уровня выходного сигнала (также называемый «приглушением»).Примерами временных изменений являются воспроизведение направлений движения, где допустимо воспроизведение музыки в фоновом режиме.

0 голосов
/ 12 февраля 2019

Вы должны использовать «AudioManager.AUDIOFOCUS_GAIN_TRANSIENT», в соответствии с документацией :

AUDIOFOCUS_GAIN_TRANSIENT

Используется для обозначения временногополучить или запрос аудио-фокуса, как ожидается, будет длиться короткое время.Примерами временных изменений являются воспроизведение направлений движения или уведомление о событии.

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