如何在用Swift Cocoa编写的OS X中检测用户不活动?

如何在用Swift Cocoa编写的OS X中检测用户不活动?,swift,macos,cocoa,time-tracking,user-inactivity,Swift,Macos,Cocoa,Time Tracking,User Inactivity,我在stackoverflow中搜索了答案,但没有一个符合我的需要。我正在Swift Cocoa macOS上创建时间跟踪应用程序,比如Hubstaff时间跟踪应用程序。此时运行一个计时器,我想检测用户在x段时间后的不活动状态,并发送一个通知,说明他在x段时间内处于空闲状态。我不熟悉iOS和macOS开发。我能举个例子说明怎么做吗 这是我的密码: import Cocoa class ViewController: NSViewController { @IBOutlet weak var

我在stackoverflow中搜索了答案,但没有一个符合我的需要。我正在Swift Cocoa macOS上创建时间跟踪应用程序,比如Hubstaff时间跟踪应用程序。此时运行一个计时器,我想检测用户在x段时间后的不活动状态,并发送一个通知,说明他在x段时间内处于空闲状态。我不熟悉iOS和macOS开发。我能举个例子说明怎么做吗

这是我的密码:

import Cocoa

class ViewController: NSViewController {

@IBOutlet weak var label: NSTextField!
@IBOutlet weak var playImage: NSButton!

var timer : Timer!
var isTimerWorking : Bool = false
var startTime : Date!

override func viewDidLoad() {
    super.viewDidLoad()
}

@IBAction func playPause(_ sender: NSButton) {

    if isTimerWorking {
        endTimer()
        playImage.image = NSImage(named: NSImage.Name("play"))
        sender.state = .off
    } else {
        startTimer()
        playImage.image = NSImage(named: NSImage.Name("stop"))
        sender.state = .off
    }
}

func startTimer() {
    startTime = Date()
    timer = Timer.scheduledTimer(
        timeInterval: 1.0,
        target: self,
        selector: #selector(self.timerCounter),
        userInfo: nil,
        repeats: true
    )
    isTimerWorking = true
}

func endTimer() {
    if timer != nil {
        timer.invalidate()
        label.stringValue = "00:00:00"
    }
    isTimerWorking = false
}

@objc func timerCounter() {
    let currentTime = Date().timeIntervalSince(startTime)
    let hour   = Int(fmod(currentTime/3600, 60))
    let minute = Int(fmod(currentTime/60,   60))
    let second = Int(fmod(currentTime,      60))
    let hourValue   = String(format:"%02d", hour)
    let minuteValue = String(format:"%02d", minute)
    let secondValue = String(format:"%02d", second)
    label.stringValue = "\(hourValue):\(minuteValue):\(secondValue)"
}
}

在我自己的时间跟踪应用程序中,我正在使用

var lastEvent:CFTimeInterval = 0
lastEvent = CGEventSource.secondsSinceLastEventType(CGEventSourceStateID.hidSystemState, eventType: CGEventType(rawValue: ~0)!)

print(lastEvent)

获取用户空闲时间。

您可能希望使用Date()。如果您坚持使用计时器(),请参阅此链接。@Willeke的可能副本我想在Mac电脑上检测用户的活动,而不是在应用程序上。应用程序将最小化。你需要一些代码,如果不是在应用程序中,代码在哪里运行?@Willeke当然在应用程序中。我是新来的,这就是为什么如果我能得到一个例子来说明我该怎么做会很棒。你知道为什么在用户登录操作系统之前调用我的应用程序(启动守护程序)会导致它冻结吗?