2011-04-03 35 views
0

我的要求,我的應用程序得到通知,每10分鐘,並通知下做一些處理接收事件即使我關閉我的應用程序,從而爲我創建如下UILocalNotification代碼,只是爲了測試目的我在那裏設置通知聲音。在我關閉我的應用程序並進入設備主屏幕後,我只收到一次通知聲音,並沒有在我的程序中發出「didReceiveLocalNotification」事件。 通常情況下,通知顯示爲通知警報與某些機構,然後單擊「查看」按鈕,然後向我們的應用程序發送「didReceiveLocalNotification」事件方法。但我不想顯示任何通知警報,並且我的應用程序應該使用「didReceiveLocalNotification」事件方法作爲後臺進程調用。請告訴我如何通過UILocalNotification API解決我的問題?如果我的應用程序應該每隔10分鐘在後臺通知使用UILocalNotification是不可能的,那麼我還有什麼方法可以嘗試解決它?iPhone:問題與UILocalNotification流

- (BOOL)application:(UIApplication *)application 

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    [self initLocalNotification : 600]; 

    self.window.rootViewController = self.viewController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

-(void) initLocalNotification :(int) seconds { 

    // Notity after 10 * 60 seconds 
    NSDate *notificationDate = [NSDate dateWithTimeIntervalSinceNow:seconds]; 

    if (notify) 
     notify = NULL; 
    notify = [ [UILocalNotification alloc] init ]; 
    notify.fireDate = notificationDate; 
    //notify.applicationIconBadgeNumber = 1; 
    notify.soundName = UILocalNotificationDefaultSoundName; 
    notify.timeZone = [NSTimeZone defaultTimeZone]; 
    //notify.alertBody = @"Local notification test"; 
    notify.repeatInterval = kCFCalendarUnitDay; 

    NSDictionary *infoDict = [NSDictionary dictionaryWithObject:@"notifiValue" forKey:@"notifiKey"]; 
    notify.userInfo = infoDict; 

    NSLog(@"Initiate notification in %d seconds", seconds); 

    // Schedule the notification 
    [[UIApplication sharedApplication] scheduleLocalNotification:notify]; 
    [notify release]; 

} 

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { 

    NSLog(@"Notification triggerred.."); 
[[UIApplication sharedApplication] cancelAllLocalNotifications]; 
    [ self initLocalNotification : 600 ]; 
} 

謝謝!

回答

3

本地和推送通知除非用戶接受該通知將不會觸發應用程序代理的方法(即水龍頭視圖)。

請注意,標記爲VOIP應用程序的應用程序可以通過使用UIApplication setKeepAliveTimeout:handler:定期在後臺執行某些操作,標記爲使用位置服務的應用程序將在後臺接收位置更新。但是,如果您將您的應用標記爲VOIP或位置感知,則必須通過Apple來證明這一點 - 即您必須實際向用戶提供VOIP /位置服務才能讓您的應用獲得批准。

+0

嗨,非常感謝!如果需要顯示警報,我認爲我不能跟UILLocalnotification一起去。如果我想使用位置服務,它是如何工作的?我的應用程序可以設置一些時間間隔,並在那個時候收到通知來完成一些任務嗎?是否有任何教程或樣本需要通過? – Getsy 2011-04-03 20:53:13

+0

隨着位置服務,您會在位置發生變化時收到通知,因此如果用戶呆在一個地方,您不會收到很多通知(特別是如果您僅註冊「重大位置更改」,則應該採取措施保存電池)。而應用程序將不得不提供一些位置服務給用戶,否則它會被拒絕。 – SVD 2011-04-03 23:32:27

+0

噢!如果位置通知只有在手機上的位置發生變化時纔會收到通知,那麼它對我的目的不會有用!然後不知道如何在iOS開發中每隔一定的時間間隔實現我對背景通知的要求(即使當我的應用程序關閉時)? – Getsy 2011-04-04 05:24:00