使用 SwiftUI 确定后台状态

问题描述 投票:0回答:2

在 iOS 13+ 上使用 SwiftUI 时,确定后台状态的传统方法不再有效。例如:

  • AppDelegate 方法

    applicationDidEnterBackground(_ application: UIApplication)
    applicationDidBecomeActive(_ application: UIApplication)
    不会被调用。

  • 通知

    didEnterBackgroundNotification
    willEnterForegroundNotification
    didBecomeActiveNotification
    willResignActiveNotification
    不会发送。

作为替代方案,还有

UIWindowSceneDelegate
回调:
这些替换的问题在于它们特定于进入和离开前景的多个场景之一。它们没有提供一种简单明了的方法来确定整个应用程序是在前台还是在后台。
确定应用程序前台/后台状态很重要,原因与用户界面无关。
 当应用程序不在前台时,某些 iOS 功能会静默失败(通配符蓝牙扫描和 iBeacon 传输是两个例子。)我经常开发没有任何用户界面的 iOS 框架,所以 
我需要一种方法来确定应用程序背景/前景状态,而不依赖于在
sceneDidBecomeActive(_ scene: UIScene)

中粘贴一堆样板代码——我这样问是不合理的有人使用我的框架来做到这一点。

是否有任何直接的方法可以使用 SwiftUI 确定应用程序在 iOS 13 上的前台/后台状态?

您也可以在 SwiftUI 中使用

sceneWillResignActive(_ scene: UIScene)
通知:

sceneWillEnterForeground(_ scene: UIScene)
swiftui ios13 appdelegate nsnotificationcenter uiscenedelegate
2个回答
5
投票

sceneDidEnterBackground(_ scene: UIScene)

  • UIWindowSceneDelegate
    
    
  • UIApplication
    
    
  • 举个例子:
    didEnterBackgroundNotification
  • 我相信在 SwiftUI 中处理事件的正确方法是使用 
  • onReceive
方法。

willEnterForegroundNotification
    

2
投票
正确的方法是完全不使用 NotificationCenter,而是使用“scenePhase”环境对象。可以在任何需要查看状态或整个应用程序的 SwiftUI 视图中使用。

didBecomeActiveNotification


© www.soinside.com 2019 - 2024. All rights reserved.