VolumeProvider的onAdjustVolume上的步骤有多大?

我正在实施一个VolumeProvider但我不知道一旦onAdjustVolume被调用,我应该设置我的播放器的音量。 它给我的只是方向。 现在我正在使用getCurrentVolume() + direction但只有在步骤等于AudioManager.ADJUST_LOWERAudioManager.ADJUST_RAISEAudioManager.ADJUST_SAME时才有效。

那么我怎么知道这些步骤会是什么?

谢谢。

编辑:我创建了一个示例以显示与@auval响应的问题。

public class MainActivity extends AppCompatActivity {
    private String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ProgressBar volumeBar = (ProgressBar) findViewById(R.id.progress);
        final VolumeProviderCompat volumeProviderCompat = new VolumeProviderCompat(VolumeProviderCompat.VOLUME_CONTROL_ABSOLUTE, 100, 100) {
            @Override
            public void onAdjustVolume(int direction) {
                Log.i(TAG, "onAdjustVolume " + direction);
                if (direction > 0) {
                    setCurrentVolume(getCurrentVolume() + 5);
                } else if (direction < 0) {
                    setCurrentVolume(getCurrentVolume() - 5);
                }
            }

            @Override
            public void onSetVolumeTo(int volume) {
                super.onSetVolumeTo(volume);
                Log.i(TAG, "onSetVolumeTo " + volume);
            }
        };
        volumeProviderCompat.setCallback(new VolumeProviderCompat.Callback() {
            @Override
            public void onVolumeChanged(VolumeProviderCompat volumeProvider) {
                volumeBar.setMax(volumeProvider.getMaxVolume());
                int currentVolume = volumeProvider.getCurrentVolume();
                Log.i(TAG,"onVolumeChanged " + currentVolume);
                volumeBar.setProgress(currentVolume);
            }
        });
        final MediaSessionCompat test = new MediaSessionCompat(this, "Test");
        PlaybackStateCompat.Builder stateBuilder = new PlaybackStateCompat.Builder();
        stateBuilder.setActions(PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE | PlaybackState.ACTION_PAUSE | PlaybackState.ACTION_REWIND | PlaybackState.ACTION_FAST_FORWARD);
        stateBuilder.setState(PlaybackState.STATE_PLAYING, PlaybackState.PLAYBACK_POSITION_UNKNOWN, 1.0f);
        test.setPlaybackState(stateBuilder.build());
        test.setActive(true);
        test.setPlaybackToRemote(volumeProviderCompat);
    }
}

这是屏幕上发生的事情:

在这里输入图像描述


最好使用VolumeProviderCompat,因为VolumeProvider要求最小sdk为21。

  • 您需要决定要提供多少个音量步骤。
  • 用这个数字除以最大音量,它会给你在每一步调整的值。
  • 例如,最大音量为100,您决定提供5个步骤==>每一步都会将音量改变20。
  • 相应地调整音量。
  • 例如,当前音量为40,音量增加事件==>您需要将音量设置为60。
  • 顺便说一下,规范中没有任何内容表明音量控制必须是线性的,您可以决定以小间隔变化开始并在每个连续音量按下时增加跳跃...

    链接地址: http://www.djcxy.com/p/96849.html

    上一篇: How large are the steps on onAdjustVolume of the VolumeProvider?

    下一篇: JS number function adds up zeros at the end