Procházet zdrojové kódy

修复退出时播放状态错误
待修复:歌曲变动时,初始时间会变成上一次的秒数

chendeben před 1 rokem
rodič
revize
fcc4d2f280

+ 13 - 4
entry/src/main/ets/common/service/PlayerManager.ets

@@ -252,7 +252,12 @@ export class PlayerManager implements IPlayerManager {
       // 无论播放器报告的状态如何,都尝试暂停
       this.mIjkMediaPlayer.pause();
       
-      LogUtils.getInstance().LOGI('PlayerManager: Playback paused, isPaused flag set to true');
+      // 关键修复:通知状态回调播放已暂停(使用onPlaybackCompleted来确保状态保存)
+      if (this.stateCallback) {
+        this.stateCallback.onPlaybackCompleted();
+      }
+      
+      LogUtils.getInstance().LOGI('PlayerManager: Playback paused, isPaused flag set to true, state callback notified');
     } catch (error) {
       LogUtils.getInstance().LOGI(`PlayerManager pausePlayback error: ${error}`);
     }
@@ -262,9 +267,13 @@ export class PlayerManager implements IPlayerManager {
     try {
       this.mIjkMediaPlayer.stop();
       this.isPaused = false; // 清除暂停状态
-      // 注意:不要在这里调用release(),因为这会释放播放器资源
-      // release()应该只在真正需要释放资源时调用(如应用退出)
-      LogUtils.getInstance().LOGI('PlayerManager: Playback stopped');
+      
+      // 关键修复:通知状态回调播放已停止
+      if (this.stateCallback) {
+        this.stateCallback.onPlaybackCompleted();
+      }
+      
+      LogUtils.getInstance().LOGI('PlayerManager: Playback stopped and state callback notified');
     } catch (error) {
       LogUtils.getInstance().LOGI(`PlayerManager stopPlayback error: ${error}`);
     }

+ 1 - 10
entry/src/main/ets/common/service/UnifiedPlayerService.ets

@@ -2047,20 +2047,11 @@ async initialize(context: common.UIAbilityContext): Promise<void> {
     
     // 保存播放状态变化
     this.saveCurrentState();
-    
-    
     this.updateSessionPlayState();
     
     // 更新卡片显示播放完成状态
     this.updateWidgetsForPlayStateChange();
-    
-    // 自动播放下一首(如果有的话)
-    const currentPlayMode = this.stateModel.getState().playMode;
-    if (this.playlistModel.hasNext(currentPlayMode)) {
-      setTimeout(() => {
-        this.playNext();
-      }, 500);
-    }
+
   }
 
   onPlaybackError(what: number, extra: number): void {

+ 12 - 0
entry/src/main/ets/entryability/EntryAbility.ets

@@ -237,6 +237,18 @@ export default class EntryAbility extends UIAbility {
     onDestroy() {
         hilog.info(0x0000, 'Heanup2', '%{public}s', 'Ability onDestroy');
         
+        // 关键修复:在APP销毁时保存播放器状态
+        try {
+            const unifiedPlayerService = UnifiedPlayerService.getInstance();
+            if (unifiedPlayerService) {
+                // 确保在APP被杀掉时保存当前播放状态
+                unifiedPlayerService.release();
+                hilog.info(0x0000, 'Heanup2', 'UnifiedPlayerService released and state saved on app destroy');
+            }
+        } catch (error) {
+            hilog.error(0x0000, 'Heanup2', `Failed to release UnifiedPlayerService: ${error}`);
+        }
+        
         // 注销卡片call事件监听器
         this.unregisterWidgetCallListeners();