iPhone Objective-c обнаруживает блокировку экрана

Я новичок в создании приложения для iPhone с Objective-c

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

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

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

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

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

Пожалуйста, дайте мне немного знаний

#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");
                                 }
                             }
                             );

}

2 ответа

Импортируйте это в приложение делегат #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 будет заблокирован, вы получите "блокировку устройства" в качестве журнала. Таким образом, вы можете написать свой код в этом блоке. Это поможет вам.

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

Посмотрите на эти ссылки слишком надеюсь, что это может помочь вам:

1) Блокировка разблокировки событий iphone

2) Как я могу обнаружить события блокировки / разблокировки экрана на iPhone?

МетодapplicationWillSuspend не существует изначально, но в AppDelegate.m вы можете поиграть с applicationWillResignActive и applicationWillResignActive. Эти методы будут вызываться, когда пользователь нажимает кнопку "Домой" и приложение переходит в фоновый режим (здесь вы можете сохранить соединение, но вам следует прочитать документацию Apple, касающуюся фоновых задач, потому что ваше соединение не может оставаться в живых вечно, если приложение остается в фоновом режиме. Существуют и другие способы поддерживать ваше приложение в актуальном состоянии, например, обновление при push-уведомлении и т. д.):

- (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:.
}

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

Другие вопросы по тегам