2014-04-24 91 views
1

我正在進行報警應用。我最近2周遇到了一個問題。我的問題是:我的應用程序正在後臺運行。首次安裝應用程序並設置鬧鐘&關閉應用程序。如果鬧鈴時間超過當前時間3分鐘以上,則表示3分鐘鬧鈴在後臺過程中不響鈴。如果應用程序處於打開狀態,則警報正在工在後臺運行3分鐘後報警不響鈴

這是我的代碼:

self->bgTask = 0; 
    NSAssert(self->bgTask == UIBackgroundTaskInvalid, nil); 

    bgTask = [application beginBackgroundTaskWithExpirationHandler:^
    { 
     NSLog(@"beginBackgroundTaskWithExpirat"); 
     dispatch_async(dispatch_get_main_queue(),^
     { 
      NSLog(@"dispatch_async"); 
      [application endBackgroundTask:self->bgTask]; 
      self->bgTask = UIBackgroundTaskInvalid; 
     }); 
    }]; 

    dispatch_async(dispatch_get_main_queue(),^
    { 
     NSLog(@"dispatch_get_main_queue"); 
     //Start BG Timer 
    [self Start_Update_Timer]; 
     self->bgTask = UIBackgroundTaskInvalid; 
    }); 

// This is my timer for background running .. 
-(void) Start_Update_Timer 
    { 
     //If timer is already running, stop the timer 
     if(self.callTimer) 
     { 
      [self.callTimer invalidate]; 
      self.callTimer=nil; 
     } 

    //call the timer for every one sec 
    self.callTimer =[NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(update_Alarm_List) userInfo:nil repeats:YES]; 
     [[NSRunLoop mainRunLoop] addTimer:self.callTimer forMode:NSRunLoopCommonModes]; 
    } 
+0

'beginBackgroundTaskWithExpirationHandler:'是不是意味着這一點,是爲了完成一些冗長像上傳圖片到服務器這樣的任務。您無法使用'beginBackgroundTaskWithExpirationHandler:'在後臺保留應用程序。您必須使用'UILocalNotification'作爲警報,否則可能會/會讓您的應用程序被拒絕。 – rckoenes

回答

2

由於應用程序不應該像這樣工作。如果你希望你的應用程序在後臺連續播放聲音,那麼它應該被註冊爲一個特殊的應用程序。像音樂播放器一樣。如果您的應用只提供告警,那麼您必須使用本地通知來從應用中「觸發」聲音。通知可以用30秒的聲音播放,並以特定的時間間隔重播。 3分鐘後,您的應用程序將無法播放,因爲您的「後臺」執行時間已過。那就是蘋果讓你的應用程序在後臺運行的時間,以便在用戶關閉你的應用程序之後做任何你必須做的事情。

這是在您想要在背景上繼續播放聲音的情況下。請注意,如果播放停止,您的應用程序將停止。

https://developer.apple.com/library/ios/qa/qa1668/_index.html#//apple_ref/doc/uid/DTS40010209

如果您想使用聲音通知(30秒最大)在這裏看到:

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html

+0

Thnaks爲您的答覆,但它不適合我。我在後臺使用計時器。我認爲我面臨這個問題。 –

+0

你根本不應該使用定時器,你需要安排一個本地通知。 – Pochi

+0

只有30秒沒有本地通知。我想充分響。如果用戶停止,那麼它會停止 –