Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何处理来自MediaSession远程卷覆盖的更改?_Java_Android - Fatal编程技术网

Java 如何处理来自MediaSession远程卷覆盖的更改?

Java 如何处理来自MediaSession远程卷覆盖的更改?,java,android,Java,Android,我正在尝试实现远程音量控制。它已经可以使用硬件音量键控制音量,但当我尝试在MediaSession远程音量覆盖中移动滑块时,不会调用VolumeProviderCompat.onAdjustVolume(…)回调。我还尝试了其他回调,如MediaSessionCompat.Callback.onMediaButtonEvent(…)或VolumeProviderCompat.onSetVolumeTo(…),但根本没有调用它们 如果您不知道我所说的“MediaSession远程卷覆盖”是什么意思

我正在尝试实现远程音量控制。它已经可以使用硬件音量键控制音量,但当我尝试在MediaSession远程音量覆盖中移动滑块时,不会调用
VolumeProviderCompat.onAdjustVolume(…)
回调。我还尝试了其他回调,如
MediaSessionCompat.Callback.onMediaButtonEvent(…)
VolumeProviderCompat.onSetVolumeTo(…)
,但根本没有调用它们

如果您不知道我所说的“MediaSession远程卷覆盖”是什么意思,下面是一个屏幕截图:

我创建了一个演示项目,您可以在此处下载:

以下是我的演示活动的相关部分:

public class DemoActivity extends AppCompatActivity {

    ...

    private Notification createNotification(@NonNull final DemoVolumeController demoVolumeController) {
        Log.d(TAG, "createNotification()");

        final NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setSmallIcon(R.mipmap.ic_launcher);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            if (session != null) {
                session.release();
            }
            session = new MediaSessionCompat(this, "demoMediaSession");
            session.setPlaybackState(new PlaybackStateCompat.Builder()
                .setState(PlaybackStateCompat.STATE_PLAYING, 1, 1.0f)
                .build());
            session.setPlaybackToRemote(createVolumeProvider(demoVolumeController));
            session.setActive(true);
        }

        return builder.build();
    }

    private VolumeProviderCompat createVolumeProvider(@NonNull final DemoVolumeController demoVolumeController) {
        // I don't use this callback directly, but I need to set it or my VolumeProvider will not work. (sounds
        // strange but I tried it several times)
        session.setCallback(new MediaSessionCompat.Callback() {
            @Override
            public boolean onMediaButtonEvent(final Intent mediaButtonEvent) {
                Log.d(TAG, "onMediaButtonEvent() called with: " + "mediaButtonEvent = [" + mediaButtonEvent + "]");
                return super.onMediaButtonEvent(mediaButtonEvent);
            }
        });

        return new VolumeProviderCompat(VolumeProviderCompat.VOLUME_CONTROL_RELATIVE,
            100,
            demoVolumeController.getVolume()) {
            @Override
            public void onAdjustVolume(final int direction) {
                final int volume = demoVolumeController.setVolumeRelative(direction);
                showVolume(volume);

                Log.d(TAG, "onAdjustVolume() called with: " + "direction = [" + direction + "] - " +
                    "new volume=" + volume);

                // Nasty hack to get sync with the volume overlay of Android. setCurrentVolume does not work :(
                session.setPlaybackToRemote(createVolumeProvider(demoVolumeController));
            }
        };
    }

    ...
}
有什么提示吗?
提前谢谢你

您是否还需要实现
onSetVolumeTo
方法,如本文所示