2017-09-15 486 views
1

用於檢測iOS11屏幕錄製功能開或關我使用了isCaptured和UIScreenCapturedDidChange通知。如何檢查iOS11屏幕錄製打開或關閉?

當我第一次啓動應用程序和在iOS11內置屏幕錄製功能時,它會通知值爲True的選擇器方法,但是當我殺死(終止)我正在運行的應用程序並再次啓動應用程序時,再次執行相同的程序我的選擇器方法沒有被調用。

這是我的代碼:

我在viewWillAppear中添加一個觀察員()方法:

NotificationCenter.default.addObserver(self, selector: #selector(handleNotification), name: NSNotification.Name.UIScreenCapturedDidChange, object: nil) 

選擇器方法如下:

@objc 
func handleNotification(notification:Notification){ 

    let isCaptured = UIScreen.main.isCaptured 

    print("isCaptured value = \(isCaptured)") 
} 

在這種情況下,我需要殺死應用程序,清除緩存並再次啓動應用程序以獲取屏幕錄製事件。

請建議我可以在這裏做些什麼來檢測錄製事件以保護我的內容不被錄製。

+0

你試過UIScreen上的'mirrored'屬性嗎? – yasirmturk

+0

謝謝,是的,我嘗試了鏡像屬性,但我只想獲得屏幕錄製事件。 – UmeshKumath

回答

0

我想你可以送花兒給人不管檢查該變量的通知

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 
    let isCaptured = UIScreen.main.isCaptured 
    return true 
} 
+0

感謝您的迴應,但我會嘗試在用戶開啓或關閉屏幕錄製時查找事件。 – UmeshKumath

+0

我還在「已捕獲」屬性中添加了KVO。但它只能第一次運作,但當我殺了應用程序並重新啓動後,沒有從isCaptured獲取事件。是否需要清除緩存? – UmeshKumath

+0

就像我說你不需要跟蹤事件或通知或「當它改變捕獲的值」..你可以隨時讀取值 – yasirmturk

1

斯威夫特4

添加觀察員

UIScreen.main.addObserver(self, forKeyPath: "captured", options: .new, context: nil) 

接收變化

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) { 
    if (keyPath == "captured") { 
     let isCaptured = UIScreen.main.isCaptured 

     print(isCaptured) 
    } 
}