ホームボタンでバックグラウンドで押すとタイマーが起動し、アプリケーションがフォアグラウンドに戻ってタイマーが一定時間経過すると何かを実行するアプリケーションに取り組んでいます。
私の質問は
- アプリがバックグラウンド/フォアグラウンドになったときにイベントを処理するにはどうすればよいですか?
- 特別な方法や他のテクニックはありますか?
どうもありがとう。
ホームボタンでバックグラウンドで押すとタイマーが起動し、アプリケーションがフォアグラウンドに戻ってタイマーが一定時間経過すると何かを実行するアプリケーションに取り組んでいます。
私の質問は
どうもありがとう。
アプリの appDelegate には、実装できるデリゲート メソッドがいくつかあります。
AppDelegate が準拠する必要があるUIApplicationDelegateプロトコルを確認できます。
アプリがバックグラウンドでプッシュされると、関数 applicationDidEnterBackground: が呼び出されます。フォアグラウンドに入ると applicationWillEnterForeground: が呼び出されます。
タイマーを使用しない方がよいですが、applicationDidEnterBackground: メソッドに NSDate 参照を保存してください。アプリがフォアグラウンドに入るとき、保存された NSDate を使用して timeDifference を計算できます。
- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
関数。
可能な実装は次のようになります。
#define YOUR_TIME_INTERVAL 60*60*5 //i.e. 5 hours
- (void)applicationDidEnterBackground:(UIApplication *)application
{
//... your oder code goes here
NSNumber *timeAppClosed = [NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults timeAppClosed forKey:@"time.app.closed"];
[defaults synchronize];
}
と
- (void)applicationWillEnterForeground:(UIApplication *)application
{
NSNumber *timeAppClosed = [[NSUserDefaults standardUserDefaults] valueForKey:@"time.app.closed"];
if(timeAppClosed == nil)
{
//No time was saved before so it is the first time the user
//opens the app
}
else if([[NSDate date] timeIntervalSinceDate:[NSDate dateWithTimeIntervalSince1970:[timeAppClosed doubleValue]]] > YOUR_TIME_INTERVAL)
{
//Place your code here
}
}