永远不会调用MediaControllerCompat.Callback onAudioInfoChanged

时间:2015-10-03 11:04:34

标签: android audio

我使用自己的音量控制器:

        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);

虽然它(令人惊讶地)按预期工作(除了导致FC的Android 4上的错误,但不出所料)MediaControllerCompat.Callback的onAudioInfoChanged永远不会被调用,尽管所有其他回调都可以。

由于谷歌的MediaController / MediaSession文档(不出所料)不存在,我可能会遗漏一些东西。也许我应该在每次音量变化时以某种方式调用onAudioInfoChanged,但是如何?

这个回调有效:

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

但是又如何从那里调用MediaControllerCompat.Callback的onAudioInfoChanged?有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的onAdjustVolume()表示已提交音量调整请求 - 要获得回调,请务必在onAdjustVolume()方法中致电setCurrentVolume()。根据Javadoc,该方法:

  

设置当前音量,通知系统音量已更改。

注意:根据setCallback()上的文档,这是在支持库内部使用的 - 您不应该设置自己的回调,因为它将覆盖MediaSessionCompat时设置的回调你调用setPlaybackToRemote(),导致回调不会传播到任何控制器。