4

これが取り引きです...受け取ったアプリケーションの状態と区別する方法が必要です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
4

1 に答える 1

1

その後すぐに状態がアクティブになるかどうかを確認するのを待ってもらえますか?

2 番目のケースでローカル通知を受け取ると、コールバックを受け取った直後にアプリがアクティブになります (ユーザーがアプリに戻ることを選択しているため)。では、ローカル通知を保存して (たとえば) 50 ミリ秒後にそれを処理するのはどうでしょうか。その時点でアプリケーションの状態がアクティブな場合、ユーザーは通知センターからアプリを選択しました。

于 2012-07-07T21:05:56.020 に答える