Android
アプリがフォアグランドにいる時にActivityのフォーカスが失われたら、ダイアログが表示されたと判断する
class MainActivity : AppCompatActivity() {
var isDialogVisible = false
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) {
isDialogVisible = false
} else {
if (lifecycle.currentState == Lifecycle.State.RESUMED) {
// アプリがフォアグランドにいる時にフォーカスが失われたら、ダイアログが表示されたと判断する
isDialogVisible = true
}
}
}
iOS
最前面のViewControllerが UIAlertControllerであれば、ダイアログが表示されていると判断する
AppDelegate.swift
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var isDialogVisible: Bool {
guard let topVC = UIApplication.topViewController() else { return false }
if topVC is UIAlertController {
return true
}
return false
}
}
UIApplication+.swift
import UIKit
extension UIApplication {
class func topViewController(controller: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
if let navigationController = controller as? UINavigationController {
return topViewController(controller: navigationController.visibleViewController)
}
if let tabController = controller as? UITabBarController {
if let selected = tabController.selectedViewController {
return topViewController(controller: selected)
}
}
if let presented = controller?.presentedViewController {
return topViewController(controller: presented)
}
return controller
}
}