尽管有很多关于构建音乐播放器的教程,比如THIS one,但目前没有一个在手机锁定时适用于android。我已经尝试了Native Audio与Media Session有一个前台服务,播放音频和音频控制在通知栏。HERE是我的Ionic项目。
音频播放正确,按钮工作正常,进度条更新,但请在我的smart-audio.service.ts中查看此方法
setMediaSessionPosition() {
if(this.mediaProgressTimeout) {
clearTimeout(this.mediaProgressTimeout);
}
this.position().then(secs => {
if(this.active && this.active.status == "playing") {
let duration = this.active.mediaObj.getDuration();
if(!isNaN(duration)) {
this.ending = duration - secs < 5;
MediaSession.setPositionState({
duration: duration,
playbackRate: 1,
position: secs
});
}
}
});
this.mediaProgressTimeout = setTimeout(() => {
if(this.active)
this.setMediaSessionPosition();
}, 1000);
}
字符串
如您所见,此方法每隔1秒递归调用自身以更新状态栏。当我锁定我的手机,它仍然工作了几分钟,但然后不是1秒,它在2秒,3秒后调用自己,然后它再也没有调用,就好像我的应用程序的进程被置于永久睡眠。
当发生这种情况时,不仅进度条停止更新,而且媒体按钮(上一首曲目,下一首曲目,暂停)也无响应。音频一直播放到结束,但下一首曲目永远不会播放,因为我的应用程序处于休眠状态。即使每次调用超时方法时都会请求Wakelocks。
我试过Wakelocks,我检查了前台服务的Android权限,后台服务,一切,我检查了Android清单上的广播接收器的媒体按钮,一切似乎都是正确的。
我的应用程序,就像Spotify一样,即使在手机锁定的情况下也需要无限期地播放音频。为什么我的应用程序在前台服务的情况下也会进入睡眠状态?我如何防止这种情况?
P.S.:90%的Ionic插件的最后一次提交是在4年或更久以前。爱奥尼亚死了吗
1条答案
按热度按时间4szc88ey1#
我们可以试试加一个唤醒锁
字符串