2013-05-14 10 views
0

Мне нужны обратные вызовы на экране ON/OFF и обратные вызовы голосового вызова. Но я получаю обратные вызовы, когда мое приложение находится на переднем плане. Но я не могу получить обратные вызовы делегатов, когда мое приложение находится в фоновом режиме. Как можно получить блокировку или делегировать обратные вызовы, пока мое приложение находится в фоновом режиме?Предотвращение приложения iPhone для неактивного состояния

Я прочитал яблочного документ http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

и я нашел «выполнение и многозадачность Backgound» http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW20

Но ничто не помогает мне в этом вопросе. Пожалуйста помоги.

+0

Вы пробовали эти два метода в приложении делегат, - (void) applicationWillResignActive: (приложение UIApplication *); - (void) applicationDidBecomeActive: (приложение UIApplication *); –

+0

К сожалению, экран вкл./Выкл. И начало/конец события не доступны непосредственно для приложения. Вы должны использовать существующие события приложения и создать обходной путь. – Amar

+0

Я также попробовал код выполнения фона. Но он будет выполнять код до тех пор, пока поток не будет активен. Когда управление выходит за пределы потока. Приложение не отвечало на какие-либо события (если приложение находится в фоновом режиме). –

ответ

0

попробуйте использовать UILocaleNotification. Он может регистрировать уведомление в системе и может реализовать в указанное время.

-(void) viewDidLoad{ 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enteredBackground:) name:@"didEnterBackground" object:nil]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(enteredForeground:) name:@"didEnterForeground" object:nil]; 
} 
- (void) enteredBackground:(NSNotification*)notification{ 

     self.notification = [[UILocalNotification alloc] init]; 

//set the notification property 

     [[UIApplication sharedApplication] scheduleLocalNotification:self.notification]; 


    } 


} 
    - (void) enteredForeground:(NSNotification*)notification{ 
        //do something 
[[UIApplication sharedApplication] cancelLocalNotification:self.notification]; 
     } 
    } 

В AppDelegate.m

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
      [[NSNotificationCenter defaultCenter] postNotificationName:@"didEnterBackground" object:nil]; 
} 

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"didEnterForeground" object:nil]; 
} 
+1

Это даст мне обратные вызовы, когда мое приложение войдет в фоновое или переднее состояние. Это не дает мне обратные вызовы, когда мое приложение работает в фоновом режиме. Мне нужно делегировать обратные вызовы, когда мое приложение уже работает в фоновом режиме. –

0

Вы можете запустить приложение в фоновом режиме в течение 3 мин и весь код будет работать попробовать

func registerBackgroundTask() { 
      backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in 
       self?.endBackgroundTask() 
      } 
      assert(backgroundTask != UIBackgroundTaskInvalid) 
     } 
     func endBackgroundTask() { 
      print("Background task ended.") 
      UIApplication.shared.endBackgroundTask(backgroundTask) 
      backgroundTask = UIBackgroundTaskInvalid 
     } 

И просто звоню self.registerBackgroundTask() приложение запускается в фоновом режиме в течение трех минут.

Смежные вопросы