iOS:我可以检测设备屏幕是否打开/关闭?

时间:2016-10-21 08:11:15

标签: ios iphone swift screen

如何检查iOS中的屏幕是打开还是关闭?我想知道屏幕当前是否打开,即使我的应用程序在后台。我希望有一个事件监听器。感谢。

3 个答案:

答案 0 :(得分:2)

Swift 3 中,你可以这样做:

override func viewDidLoad() {
        super.viewDidLoad()
        // Observer UIApplicationDidBecomeActive,UIApplicationDidEnterBackground
        NotificationCenter.default.addObserver(
                self,
                selector: #selector(MyViewController.applicationDidBecomeActive(notification:)),
                name: NSNotification.Name.UIApplicationDidBecomeActive,
                object: nil)

        NotificationCenter.default.addObserver(
                self,
                selector: #selector(MyViewController.applicationDidEnterBackground(notification:)),
                name:NSNotification.Name.UIApplicationDidEnterBackground,
                object: nil)
}

func applicationDidBecomeActive(notification: NSNotification) {
  // here my app did become active
}
func applicationDidEnterBackground(notification: NSNotification) {
  // here my app did enter background
}

您可以在official guide

中找到更多详细信息

来自实际来源的详细信息:

extension NSNotification.Name {
    // These notifications are sent out after the equivalent delegate message is called
    @available(iOS 4.0, *)
    public static let UIApplicationDidEnterBackground: NSNotification.Name
    @available(iOS 4.0, *)
    public static let UIApplicationWillEnterForeground: NSNotification.Name
    public static let UIApplicationDidFinishLaunching: NSNotification.Name
    public static let UIApplicationDidBecomeActive: NSNotification.Name
    public static let UIApplicationWillResignActive: NSNotification.Name
    public static let UIApplicationDidReceiveMemoryWarning: NSNotification.Name
    public static let UIApplicationWillTerminate: NSNotification.Name
    public static let UIApplicationSignificantTimeChange: NSNotification.Name
    public static let UIApplicationWillChangeStatusBarOrientation: NSNotification.Name // userInfo contains NSNumber with new orientation
    public static let UIApplicationDidChangeStatusBarOrientation: NSNotification.Name // userInfo contains NSNumber with old orientation
    // userInfo dictionary key for status bar orientation
    public static let UIApplicationWillChangeStatusBarFrame: NSNotification.Name // userInfo contains NSValue with new frame
    public static let UIApplicationDidChangeStatusBarFrame: NSNotification.Name // userInfo contains NSValue with old frame
    // userInfo dictionary key for status bar frame
    @available(iOS 7.0, *)
    public static let UIApplicationBackgroundRefreshStatusDidChange: NSNotification.Name
    @available(iOS 4.0, *)
    public static let UIApplicationProtectedDataWillBecomeUnavailable: NSNotification.Name
    @available(iOS 4.0, *)
    public static let UIApplicationProtectedDataDidBecomeAvailable: NSNotification.Name   
    // Key in options dict passed to application:[will | did]FinishLaunchingWithOptions and info for UIApplicationDidFinishLaunchingNotification    
    // This notification is posted after the user takes a screenshot (for example by pressing both the home and lock screen buttons)
    @available(iOS 7.0, *)
    public static let UIApplicationUserDidTakeScreenshot: NSNotification.Name
}

答案 1 :(得分:1)

在迅速5中,这仅对我有用:

https://stackoverflow.com/a/55711257/7505029

答案 2 :(得分:0)

您可以尝试使用此代码获取ios中的屏幕状态。

CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), //center
                                NULL, // observer
                                displayStatusChanged, // callback
                                CFSTR("com.apple.iokit.hid.displayStatus"), // event name
                                NULL, // object
                                CFNotificationSuspensionBehaviorDeliverImmediately);