我使用自己的音量控制器:
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?有什么想法吗?
答案 0 :(得分:0)
您的onAdjustVolume()
表示已提交音量调整请求 - 要获得回调,请务必在onAdjustVolume()
方法中致电setCurrentVolume()。根据Javadoc,该方法:
设置当前音量,通知系统音量已更改。
注意:根据setCallback()上的文档,这是在支持库内部使用的 - 您不应该设置自己的回调,因为它将覆盖MediaSessionCompat
时设置的回调你调用setPlaybackToRemote()
,导致回调不会传播到任何控制器。