如何在iOS Swift 4中检测屏幕锁定/解锁?

时间:2018-01-17 04:04:47

标签: ios swift iphone

如何在iOS中检测到屏幕锁定/解锁? 我正在使用Swift 4(Xcode 9.2),我尝试过以下链接,但它们对我不起作用。

如果有人可以教我,我会很高兴。感谢。

2 个答案:

答案 0 :(得分:0)

您可以通过在AppDelegate.m文件中编写以下代码来检测屏幕锁定/解锁: -

var notify_register_dispatch: int notify_token?
"com.apple.springboard.lockstate", notify_token, DispatchQueue.main
[uint64_t]
state = UINT64_MAX
notify_get_state(token, state)
if state == 0 {
    print("Unlocked")
}
else {
    print("Locked")
}

此代码将帮助您获取有关前台屏幕锁定/解锁的信息

答案 1 :(得分:0)

首先,我们需要注册我们的应用程序以进行锁定/解锁事件通知,为此,我们将使用使用c api的Objective C。

DeviceLockStatus.m

#import "DeviceLockStatus.h"
#import "notify.h"
#import "YourProjectName-Swift.h"

@implementation DeviceLockStatus

-(void)registerAppforDetectLockState {
 int notify_token;
    notify_register_dispatch("com.apple.springboard.lockstate", notify_token,dispatch_get_main_queue(), ^(int token) {
        uint64_t state = UINT64_MAX;
        notify_get_state(token, &state);

        DeviceStatus * myOb = [DeviceStatus new];  //DeviceStatus is .swift file

        if(state == 0) {
            myOb.unlocked;

        } else {
            myOb.locked;
        }

    });
}
@end

在这里,我们使用了三个import语句。 DeviceStatus.h 如下:

#ifndef DeviceLockStatus_h
#define DeviceLockStatus_h

#import  "foundation.h"
@interface DeviceLockStatus : NSObject

@property (strong, nonatomic) id someProperty;

-(void)registerAppforDetectLockState;

@end
#endif /* DeviceLockStatus_h */

在Swift项目中,我们需要在Bridging-Header中使用#import“ DeviceLockStatus.h ”。

"YourProjectName-Swift.h"

习惯于从Objective C代码调用Swift方法,尽管该文件不可见,但如果要从Objective C调用swift方法,则需要导入此文件。

DeviceStatus.swift

import Foundation

 class DeviceStatus : NSObject {

     func locked(){
        print("device locked") // Handle Device Locked events here.
    }

     func unlocked(){
         print("device unlocked") //Handle Device Unlocked events here.
    }
}