亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

鎖定解鎖事件iphone

鎖定解鎖事件iphone

LEATH 2019-07-30 16:03:39
鎖定解鎖事件iphone如何在iPhone上檢測鎖定/解鎖事件?假設它只能用于越獄設備,你能指出我正確的API嗎?通過鎖定事件,我的意思是顯示或隱藏鎖定屏幕(可能需要密碼才能解鎖)。
查看完整描述

3 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

回答:

應用程序將在各種情況下調用活動調用...并且從我的所有測試中,即使您的應用程序在后臺運行時保持清醒狀態,也無法確定屏幕是否已鎖定(CPU速度未報告,總線速度保持不變,mach_time denom / numer不會改變)......

但是,當設備鎖定時,Apple似乎關閉了加速計... 在屏幕鎖定時啟用iPhone加速計 (在iPhone 4上測試iOS4.2有此行為)

從而...

在您的應用程序委托中:

- (void)applicationWillResignActive:(UIApplication *)application{
    NSLog(@"STATUS - Application will Resign Active");
    // Start checking the accelerometer (while we are in the background)
    [[UIAccelerometer sharedAccelerometer] setDelegate:self];
    [[UIAccelerometer sharedAccelerometer] setUpdateInterval:1]; // Ping every second
    _notActiveTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(deviceDidLock) userInfo:nil repeats:NO]; // 2 seconds for wiggle}//Deprecated in iOS5- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
    NSLog(@"STATUS - Update from accelerometer");
    [_notActiveTimer invalidate];
    _notActiveTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(deviceDidLock) userInfo:nil repeats:NO];}- (void)deviceDidLock{
    NSLog(@"STATUS - Device locked!");
    [[UIAccelerometer sharedAccelerometer] setDelegate:nil];
    _notActiveTimer = nil;}- (void)applicationDidBecomeActive:(UIApplication *)application{
    NSLog(@"STATUS - Application did become active");
    [[UIAccelerometer sharedAccelerometer] setDelegate:nil];
    [_notActiveTimer invalidate];
    _notActiveTimer = nil;}

我知道......這是一種黑客攻擊,但到目前為止,它對我來說就像是一種魅力。如果您發現任何阻止其工作的問題,請更新。


查看完整回答
反對 回復 2019-07-30
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

有一種更漂亮的方式可以分辨任務切換和屏幕鎖定發起的applicationWillResignActive:回調,甚至不涉及無記錄功能,如加速度計狀態。

當應用程序移動到后臺時,應用程序委托首先發送一個applicationWillResignActive:,然后發送一個applicationDidEnterBackground:。當通過按下“鎖定”按鈕或來電來中斷應用程序時,不會調用后一種方法。我們可以使用此信息來區分這兩種情況。

假設您希望screenLockActivated在屏幕被鎖定時在方法中回調。這是魔術:

- (void)applicationWillResignActive:(UIApplication*)aApplication{
    [self performSelector:@selector(screenLockActivated)
               withObject:nil
               afterDelay:0];}- (void)applicationDidEnterBackground:(UIApplication*)aApplication{
    [NSObject cancelPreviousPerformRequestsWithTarget:self];}- (void)screenLockActivated{
    NSLog(@"yaay");}

說明:

默認情況下,我們假設每次調用applicationWillResignActive:都是因為活動 - >非活動狀態轉換(如鎖定屏幕時),但我們慷慨地讓系統通過延遲在超時(在這種情況下,單個runloop循環)中證明相反打電話給screenLockActivated。如果屏幕被鎖定,系統將完成當前的runloop循環,而不會觸及任何其他委托方法。但是,如果這是一個active-> background狀態轉換,它也會applicationDidEnterBackground:在循環結束之前調用,這允許我們從那里簡單地取消先前調度的請求,從而防止它在不應該被調用時被調用。

請享用!


查看完整回答
反對 回復 2019-07-30
  • 3 回答
  • 0 關注
  • 761 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號