簡単なテストアプリで2つのことをしようとしています。
beginBackgroundTaskWithExpirationHandlerの使用方法を学ぶのに行き詰まっています
ユーザーがホームボタンを押したときにbackgroundTaskを実行したい(特別なことは何もありません)。9分以内に、時間が期限切れになりそうなことをユーザーに警告し(可能であれば)、ユーザーがアプリに戻って10分を更新できるようにします。
iOS3または4との下位互換性は必要ありません。
簡単なテストアプリで2つのことをしようとしています。
beginBackgroundTaskWithExpirationHandlerの使用方法を学ぶのに行き詰まっています
ユーザーがホームボタンを押したときにbackgroundTaskを実行したい(特別なことは何もありません)。9分以内に、時間が期限切れになりそうなことをユーザーに警告し(可能であれば)、ユーザーがアプリに戻って10分を更新できるようにします。
iOS3または4との下位互換性は必要ありません。
コードをバックグラウンドで続行する場合は、バックグラウンドタスクでコードをラップする必要があります。終了時に電話をかけることも非常に重要endBackgroundTask
です。そうしないと、割り当てられた時間が経過した後にアプリが強制終了されます。
- (IBAction) buttonPressed: (id) sender
[self beingBackgroundUpdateTask];
// Do your long running background thing here
[self endBackgroundUpdateTask];
});
}
- (void) beingBackgroundUpdateTask
{
self.backgroundUpdateTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[self endBackgroundUpdateTask];
}];
}
- (void) endBackgroundUpdateTask
{
[[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
self.backgroundUpdateTask = UIBackgroundTaskInvalid;
}
applicationDidEnterBackground
の関数にコードを入れますUIApplicationDelegate
。を設定してUILocalNotification
スケジュールする必要があります。applicationWillEnterForeground
また、有効期限が切れる前にユーザーがアプリに戻らないように、おそらく無効にする必要があります。
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UILocalNotification *timerNotification = [[UILocalNotification alloc] init];
//set up notification with proper time and attributes
[[UIApplication sharedApplication] scheduleLocalNotification:timerNotification];
}
- (void)applicationWillEnterForeground:(UIApplication *)application
{
[[UIApplication sharedApplication] cancelAllLocalNotifications];
}
そこで指定したキャンセル コードは、実際にはすべての通知をキャンセルします。複数の通知があり、特定の通知のみをキャンセルしたい場合は、userInfo
設定時に通知のプロパティにキーと値を指定する必要があります。次に、アプリケーションがフォアグラウンドに入ると、次のようにして、すべてのアクティブな通知のリストを取得します
NSArray *notifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
それらをループし、userInfo
必要なものに到達するまでチェックしてから、そのものをキャンセルします
[[UIApplication sharedApplication] cancelLocalNotification:whateverNotification];