これが取り引きです...受け取ったアプリケーションの状態と区別する方法が必要ですUILocalNotification
。
私には理解できないシナリオが 1 つあります。これは、アプリが現在フォアグラウンドで実行されており、ユーザーが通知センター (iOS 5) をプルダウンすると、アプリが呼び出されますapplicationWillResignActive:
。これは、通知センターがその上に表示されるときにアクティブにならないため、完全に論理的です。しかし、アクティブを辞任した直後にも呼び出されると思いますが、そうapplicationDidEnterBackground:
ではありません。したがって、通知センターで UILocalNotifications を受け取ると、アプリはそれらを処理しようとしますapplication:didReceiveLocalNotification:
しかし、通知センターのリストにあるアプリからの通知をタップすると、アプリは通知センターで受信したときと同じ方法でこの通知を処理します。したがって、これらの通知は 1 つの方法でしか処理できませんが、2 つの方法で処理する必要があります。
では、これら 2 つの状況をどのように区別すればよいでしょうか。
アプリがフォアグラウンドにあり、ユーザーが
通知センターをプルダウンし、その間に通知を受け取った場合
(UIApplicationState = UIApplicationStateInactive
)アプリがフォアグラウンドにあり、ユーザーが
通知センターをプルダウンして
、リストからアプリの通知の 1 つを積極的に選択した場合 ( )UIApplicationState =
UIApplicationStateInactive
編集:
すべての通知を 00 秒のタイムスタンプで保存します。内部application:didReceiveLocalNotification:
で現在の時刻[NSDate date]
を確認し、秒が 00 より大きいかどうかを確認できますか? これは、通知をトリガーしたのは iOS ではなく、通知センターのユーザーであることを意味します。これはもちろん、通知が実際に iOS によってこのタイムリーに配信されるという事実に基づいています。iOS が 01 秒で通知を配信すると、ロジックが壊れます。しかし、そのために、iOS がいつ通知を配信するかを確認するためにログを記録しました。コンソールからの出力から判断すると、通知は実際には時間通りにミリ秒の精度 (+/- 1) で配信されているようです。もちろん、コンピューターに接続された開発デバイスを実際のシナリオと比較することはできません。
2012-07-08 10:09:00.789 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:10:00.789 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:11:00.788 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:12:00.790 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:13:00.790 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:14:00.789 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running
2012-07-08 10:15:00.789 App[7535:707] -[AppDelegate application:didReceiveLocalNotification:] [Line 399] application:didReceiveLocalNotification: method running