2015-10-03 3 views
0

Я использую свой собственный контроллер громкости:MediaControllerCompat.Callback никогда onAudioInfoChanged не вызывается

 xenoVolumeProvider = new VolumeProviderCompat(VolumeProviderCompat.VOLUME_CONTROL_RELATIVE, maxXenoVolume, XenoAmp.getAndSetPref("xenoVol", maxXenoVolume/2)) { 
      @Override 
      public void onAdjustVolume(int direction) { 
       super.onAdjustVolume(direction); 
       actionSetVolumeByTick(direction); 
       //Logger.d("Wart vol=" + mSession.getController().getPlaybackInfo().getCurrentVolume()); 
      } 
     }; 
     mSession.setPlaybackToRemote(xenoVolumeProvider); 

В то время как (удивительно) работает, как ожидалось (кроме ошибки на Android 4, что приводит к FC, Unsurprisingly) MediaControllerCompat. Callback's onAudioInfoChanged никогда не вызывается, хотя все остальные обратные вызовы.

Поскольку документация Google MediaController/MediaSession (неудивительно) несуществующая, возможно, я что-то пропустил. Может быть, мне нужно как-то вызвать onAudioInfoChanged самостоятельно при каждом изменении тома, но КАК?

Там в этот обратный вызов, который работает:

 xenoVolumeProvider.setCallback(new VolumeProviderCompat.Callback() { 
      @Override 
      public void onVolumeChanged(VolumeProviderCompat volumeProvider) { 
       // maybe I can call onAudioInfoChanged from here? 
      } 
     }); 

, но затем снова, как бы я называю onAudioInfoChanged MediaControllerCompat.Callback от туда? Есть идеи?

ответ

0

Ваш onAdjustVolume() является индикатором того, что был запрошен запрос на регулировку громкости - чтобы получить обратные вызовы, убедитесь, что вы вызываете setCurrentVolume() с точностью до onAdjustVolume(). В соответствии с Javadoc этот метод:

Установить текущий том и уведомить систему о том, что том был изменен.

Примечания: в соответствии с Документами на setCallback(), это используется внутри библиотеки поддержки - вы не должны установить свой собственный обратный вызов, поскольку это перекроет обратный вызов MediaSessionCompat «s, который устанавливается при вызове setPlaybackToRemote(), в результате чего обратные вызовы не распространяются на какие-либо контроллеры.

+0

Ну, подозревая, что он работает таким образом, setCurrentVolume() вызывается actionSetVolumeByTick (направление), и громкость контроллера установлена ​​правильно (плюс он появляется на экране, когда я устанавливаю флаг для отображения GUI), но я было бы просто получить уведомление о том, что объем был изменен, потому что для этого я использую свой собственный показатель. OnAudioInfoChanged никогда не вызывается. Должен ли я использовать любой другой обратный вызов? – ssuukk

+0

Просто чтобы подтвердить, какую версию библиотеки поддержки вы используете? Пока вы не используете 'setCallback()', поведение по умолчанию 'MediaSessionCompat' должно быть перенаправлено на ваш MediaController – ianhanniballake

+0

. Я действительно не могу позволить себе использовать какие-либо версии, кроме лучших (предположим почему? ...) 23.0.1, конечно. Я только setCallback на моем m \ MediaController и моем VolumeProviderCompat. Какой обратный вызов - нет-нет? – ssuukk

Смежные вопросы