在 Android 12 中,当通知抽屉打开并且立即关闭时,应用程序可能会崩溃并抛出以下崩溃日志:
java.lang.IllegalStateException: Trying to pop too many things from the back stack
避免此问题的方法是通过检查通知抽屉的状态来关闭它。以下是一些代码示例:
Kotlin 示例:
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager if (notificationManager.isNotificationPolicyAccessGranted && notificationManager.isNotificationPolicyAccessGranted) { val statusBarService = getSystemService("statusbar") ?.let { it as? IStatusBarService } statusBarService?.animateCollapsePanels() ?: run { // Fallback implementation for lower API levels val it = Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS) sendBroadcast(it) } }
Java 示例:
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); if (notificationManager.isNotificationPolicyAccessGranted() && notificationManager.isNotificationPolicyAccessGranted()) { Object statusBarService = getSystemService("statusbar"); if (statusBarService instanceof IStatusBarService) { ((IStatusBarService) statusBarService).animateCollapsePanels(); } else { // Fallback implementation for lower API levels Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS); sendBroadcast(intent); } }
建议将此代码放在 Activity 或 Fragment 中的 onStop() 方法中。同时,检查您的应用程序是否已更新到最新的支持 Android 12 的 SDK 版本。
上一篇:Android12CanvasdrawPoint()-Paint包含无法删除的alpha。
下一篇:Android12存在android.app.ForegroundServiceDidNotStartInTimeException问题