2016-06-06 8 views
4

Я новичок, чтобы сделать iPhone App с Objective-CiPhone Objective-C обнаружить Screen Lock

Я хочу сделать приложение, которое отправляет уведомление, когда экран iPhone заблокирован (кнопка нажата Lock) Как я могу сделать это приложение?

Я пытаюсь сделать это с помощью "applicationWillSuspend", но

/*----------------------------------------*/ 
- (void)applicationWillSuspend 
{ 
    NSLog(@"WillSuspend"); 
} 
/*----------------------------------------*/ 

Этот код не работает

Я не уверен, когда applicationWillSuspend называется

Пожалуйста, дайте me some knowledge

#import "AppDelegate.h" 
#import <notify.h> 

@interface AppDelegate() 

@end 

@implementation AppDelegate 


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // Override point for customization after application launch. 
    // iOS8 Notification permit 
    if ([UIApplication 
     instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) { 
     [[UIApplication sharedApplication] 
     registerUserNotificationSettings:[UIUserNotificationSettings 
              settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound 
              categories:nil]]; 
    } 
    return YES; 

    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); 
           if(state == 0) { 
            NSLog(@"unlock device"); 
           } else { 
            NSLog(@"lock device"); 
           } 
          } 
          ); 

} 
+0

Используйте для этого '- (void) applicationDidEnterBackground: (UIApplication *) application' delegate method – iSashok

+0

Возможно, это именно то, что вы ищете: [http://stackoverflow.com/a/14213968/5575752] (http: /stackoverflow.com/a/14213968/5575752) –

+1

Refere следующая ссылка, я думаю, это поможет вам http://stackoverflow.com/questions/7888490/how-can-i-detect-screen-lock-unlock-events- на-iphone –

ответ

3

Импортировать это в делегат приложения #import <notify.h>

Написать этот кусок кода в didFinishLaunchingWithOptions

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); 
          if(state == 0) { 
           NSLog(@"unlock device"); 
          } else { 
           NSLog(@"lock device"); 
          } 
         } 
         ); 

Так как только ваш iPhone блокируется, вы получите «стопорное устройство», как бревно. Таким образом, вы можете написать свой код в этом блоке. Это поможет вам.

+0

Я добавил свой код к моему вопросу, но он не работает. Xcode говорит, что notify_token никогда не будет выполнен. Не могли бы вы проверить мой код? – Issei

+0

@Issei, вам нужно определить 'notify_token' как ivar в AppDelegate – malex

3

Вы не можете сделать это на iPhone. Но через, Darwin notifications. Вы можете обнаружить событие, когда устройство заблокировано «com.apple.springboard.lockcomplete».

Взгляните на эти ссылки тоже, надеюсь, это может помочь вам:

1) Lock Unlock events iphone

2) How can I detect screen lock/unlock events on the iPhone?

applicationWillSuspend метод не существует изначально, но в AppDelegate. m вы можете играть с applicationWillResignActive и applicationWillResignActive эти методы будут вызываться, когда пользователь нажимает th e home и приложение перейдут в фоновый режим (здесь вы можете сохранить свое соединение вживую, но вы должны прочитать документацию на Apple относительно фоновых задач, потому что ваше соединение не может жить вечно, если приложение остается в фоновом режиме. Есть и другие способы, чтобы сохранить приложение до даты, как обновление на нажимной уведомления и т.д.):

- (void)applicationWillResignActive:(UIApplication *)application 
{ 
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
} 

и этот метод будет вызываться, когда приложение будет получить прекращено (закрыт полностью от многозадачности).

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 
} 

Вы можете обрабатывать свои соединения в рамках этих методов.

+0

note: applicationWillTerminate вызывается только в том случае, если вы явно включили его в PLIST: по умолчанию iOS (и OSX) просто выполняет sigkills-приложения (это быстрее, чем передача элемента управления в приложение , он просто отбрасывает все ваши страницы из памяти) – ingconti