Ionic Android -音乐播放器在几分钟后停止工作

j13ufse2  于 2023-08-01  发布在  Ionic
关注(0)|答案(1)|浏览(170)

尽管有很多关于构建音乐播放器的教程,比如THIS one,但目前没有一个在手机锁定时适用于android。我已经尝试了Native AudioMedia 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年或更久以前。爱奥尼亚死了吗

4szc88ey

4szc88ey1#

我们可以试试加一个唤醒锁

import android.os.PowerManager;

private PowerManager.WakeLock wakeLock;

private void acquireWakeLock() {
PowerManager powerManager = (PowerManager) 
getSystemService(Context.POWER_SERVICE);
if (powerManager != null) {
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, 
"YourApp:WakeLockTag");
    wakeLock.acquire();
}
}

private void releaseWakeLock() {
if (wakeLock != null && wakeLock.isHeld()) {
    wakeLock.release();
    wakeLock = null;
}
}

字符串

相关问题