gpt4 book ai didi

android - 如何使用新的 MediaSession 类接收 Android 5.x 上的媒体按钮按下?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:52 33 4
gpt4 key购买 nike

我正在尝试使用新的 MediaSession 类接收媒体按钮按下操作,但到目前为止我一直没有成功。有没有人设法使用新类(class)接收它们?

我已经成功地创建了一个 MediaSession 并使用它来更新远程显示器(车载娱乐系统)上的歌曲信息,但到目前为止我无法从它接收按钮按下、耳机控制和控制在蓝牙耳机上。

创建媒体 session 后,我将在用于播放音频的服务中执行以下操作:

    _mediaSession = new MediaSession(getApplicationContext(), Global.PACKAGE_NAME + "." + TAG);

if (_mediaSession == null) {
_log.e(TAG, "initMediaSession: _mediaSession = null");
return;
}

_mediaSessionToken = _mediaSession.getSessionToken();

_mediaSession.setCallback(new Callback() {
public boolean onMediaButtonEvent(Intent mediaButtonIntent) {
_log.d(TAG, "onMediaButtonEvent called: " + mediaButtonIntent);
return false;
}

public void onPause() {
Log.d(TAG, "onPause called (media button pressed)");
super.onPause();
}

public void onPlay() {
Log.d(TAG, "onPlay called (media button pressed)");
super.onPlay();
}

public void onStop() {
Log.d(TAG, "onStop called (media button pressed)");
super.onStop();
}
});

_mediaSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);

PlaybackState state = new PlaybackState.Builder()
.setActions(PlaybackState.ACTION_PLAY)
.setState(PlaybackState.STATE_STOPPED, PlaybackState.PLAYBACK_POSITION_UNKNOWN, SystemClock.elapsedRealtime())
.build();

_mediaSession.setPlaybackState(state);

_mediaSession.setActive(true);

但我仍然没有收到任何按钮按下操作。

有人有什么想法吗?

谢谢

更新改变后

    PlaybackState state = new PlaybackState.Builder()
.setActions(PlaybackState.ACTION_PLAY)
.setState(PlaybackState.STATE_STOPPED, PlaybackState.PLAYBACK_POSITION_UNKNOWN, SystemClock.elapsedRealtime())
.build();

    PlaybackState state = new PlaybackState.Builder()
.setActions(PlaybackState.ACTION_PLAY)
.setState(PlaybackState.STATE_STOPPED, PlaybackState.PLAYBACK_POSITION_UNKNOWN, 0)
.build();

我现在通过 onMediaButtonEvent() 回调接收按钮按下通知(例如通知 KEYCODE_MEDIA_PAUSE 被按下)但是 onPlay()、onPause() 和 onStop() 从未被调用,知道为什么吗?

最佳答案

onMediaButtonEvent(..) 在 MediaSession.Callback 中有一个默认实现。在您的代码中,如果您调用 super.onMediaButtonEvent(..),则将根据键码调用正确的回调,即 onPlay()onPause()

您可以查看 MediaSession.java 中的默认实现

关于android - 如何使用新的 MediaSession 类接收 Android 5.x 上的媒体按钮按下?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798116/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com