Alexa java sdk:如何在即将完成的播放中将歌曲排队?(音频播放器)

Alexa java sdk:如何在即将完成的播放中将歌曲排队?(音频播放器),java,amazon,alexa,alexa-skills-kit,alexa-skill,Java,Amazon,Alexa,Alexa Skills Kit,Alexa Skill,我正在开发一种Alexa技能,可以流式传输音频文件。播放效果很好,即使是暂停、恢复和“getNextSong”也可以,但我不能在第一首歌结束后排队 这是我调用方法将下一首歌曲排队的地方: @Override public SpeechletResponse onPlaybackNearlyFinished(SpeechletRequestEnvelope<PlaybackNearlyFinishedRequest> requestEnvelope) { logger.info("P

我正在开发一种Alexa技能,可以流式传输音频文件。播放效果很好,即使是暂停、恢复和“getNextSong”也可以,但我不能在第一首歌结束后排队

这是我调用方法将下一首歌曲排队的地方:

@Override 
public SpeechletResponse onPlaybackNearlyFinished(SpeechletRequestEnvelope<PlaybackNearlyFinishedRequest> requestEnvelope) {
logger.info("Playback nearly finished");
return queueNextSong(requestEnvelope); 
}
@覆盖
public SpeechletResponse on Playback即将完成(SpeechletRequestEnvelope requestEnvelope){
info(“播放即将完成”);
返回queueNextSong(请求信封);
}
这是我的排队方法:

private SpeechletResponse queueNextSong(SpeechletRequestEnvelope<PlaybackNearlyFinishedRequest> requestEnvelope) {

SystemState state = requestEnvelope.getContext().getState(SystemInterface.class, SystemState.class);

UserSession userSession = null;

try {
    userSession = new DynamoDbService().getUserSession(state.getUser().getUserId());
} catch (Exception e) {
    logger.error("Unable to obtain userSession Object.");
}

String url = null;
// Don't worry about this line, i just use the last object of my songList because it's cheaper to remove than the first entry.
url = userSession.getSongQueue().get(userSession.getSongQueue().size()-1);

Stream stream = new Stream();
stream.setUrl(url);
stream.setOffsetInMilliseconds(0);
stream.setExpectedPreviousToken(requestEnvelope.getRequest().getToken());
stream.setToken(url);

AudioItem audioItem = new AudioItem();
audioItem.setStream(stream);

PlayDirective playDirective = new PlayDirective();
playDirective.setAudioItem(audioItem);
playDirective.setPlayBehavior(PlayBehavior.ENQUEUE);

List<Directive> directives = new ArrayList<>();
directives.add(playDirective);

SpeechletResponse response = new SpeechletResponse();
response.setDirectives(directives);
return response; 
}
private SpeechletResponse queueNextSong(SpeechletRequestEnvelope-requestEnvelope){
SystemState状态=requestEnvelope.getContext().getState(SystemInterface.class,SystemState.class);
UserSession UserSession=null;
试一试{
userSession=new DynamoDbService().getUserSession(state.getUser().getUserId());
}捕获(例外e){
logger.error(“无法获取userSession对象”);
}
字符串url=null;
//不用担心这一行,我只使用歌曲列表中的最后一个对象,因为删除它比删除第一个条目便宜。
url=userSession.getSongQueue().get(userSession.getSongQueue().size()-1);
Stream=新流();
setUrl(url);
stream.setOffsetInms(0);
setExpectedPreviousToken(requestEnvelope.getRequest().getToken());
setToken(url);
AudioItem AudioItem=新AudioItem();
audioItem.setStream(流);
PlayDirective PlayDirective=新的PlayDirective();
playDirective.setAudioItem(audioItem);
playDirective.setPlayBehavior(PlayBehavior.ENQUEUE);
列表指令=新的ArrayList();
指令。添加(播放指令);
SpeechletResponse=新SpeechletResponse();
响应.指令(指令);
返回响应;
}

我错过了什么?我需要一些帮助,请。。。我已经阅读了官方文档并查看了论坛,但没有一个解决方案有效:(我是否返回了错误的响应?输入错误?非常感谢您的帮助。

文档不完整。不支持Java。即使我被困在这里,仍在寻找解决方案。我知道:(最有趣的是,我的问题解决了,连碰都没碰。我很沮丧,我的项目就这样离开了。有一天,我的女朋友又试了一次,结果出乎意料地成功了。:D你现在的问题是什么?也许我可以帮你?