From 8e722dc545b9410158fa7674901c3a1d8878723e Mon Sep 17 00:00:00 2001 From: AskaEth Date: Sun, 16 Aug 2026 18:10:26 +0800 Subject: [PATCH] fix: catch SecurityException when notification access not granted --- .../top/yeij/hearth/media/MediaSessionSource.kt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/top/yeij/hearth/media/MediaSessionSource.kt b/app/src/main/java/top/yeij/hearth/media/MediaSessionSource.kt index 5def390..c4e8251 100644 --- a/app/src/main/java/top/yeij/hearth/media/MediaSessionSource.kt +++ b/app/src/main/java/top/yeij/hearth/media/MediaSessionSource.kt @@ -55,9 +55,19 @@ class MediaSessionSource(context: Context) { fun start(cb: (MediaInfo?) -> Unit) { stop() callback = cb - msm.addOnActiveSessionsChangedListener(activeSessionsListener, listenerComponent) - registered = true - Log.d(TAG, "start: media session listener registered") + try { + msm.addOnActiveSessionsChangedListener(activeSessionsListener, listenerComponent) + registered = true + Log.d(TAG, "start: media session listener registered") + } catch (e: SecurityException) { + // 未授权「通知使用权」时系统抛 SecurityException:媒体监听降级为不可用,不崩溃。 + // 用户在系统设置开启通知使用权后,重启 Hearth 才会恢复媒体卡。 + // MediaSessionService throws SecurityException without notification access; + // degrade to media listening disabled instead of crashing. Media card recovers + // after the user grants notification access and restarts Hearth. + Log.w(TAG, "start: no notification access, media listener disabled: ${e.message}") + registered = false + } } // 注销监听:释放回调引用,供 Activity onDestroy 调用