15

私のアプリでは、サービスをフォアグラウンドに配置して、次を使用してサービスが強制終了されないようにします。

startForeground(NOTIFY_ID, notification);

これにより、ユーザーへの通知も表示されます(これはすばらしいことです)。問題は、後で通知を更新する必要があることです。だから私はコードを使用します:

notification.setLatestEventInfo(getApplicationContext(), someString, someOtherString, contentIntent);
mNotificationManager.notify(NOTIFY_ID, notification);

問題は、これを行うと、サービスが特別なフォアグラウンドステータスから外れるのでしょうか。

この回答では、CommonsWareはこの動作が可能であることを示していますが、彼は確信が持てません。それで、誰かが実際の答えを知っていますか?


注:この質問から抜け出す簡単な方法はstartForeground()、通知を更新するたびに繰り返し電話をかけることです。この代替案も機能するかどうかを知りたいと思っています。

4

3 に答える 3

13

ここで言われたことを明確にするために:

私が理解していることから、通知をキャンセルすると、サービスはフォアグラウンド サービスではなくなりますので、その点に注意してください。通知をキャンセルした場合は、startForeground() を再度呼び出して、サービスのフォアグラウンド ステータスを復元する必要があります。

答えのこの部分は、永続的なを使用して進行中のNotificationセットを削除できることを示唆しています。本当じゃない。を使用して進行中の通知セットを削除することはできません。ServiceNotificationManager.cancel()NotificationstartForeground()NotificationManager.cancel()

それを削除する唯一の方法は、を呼び出すことですstopForeground(true)。そのため、進行中の Notification が削除されます。これによりService、フォアグラウンドでの停止も行われます。つまり、実際には逆です。はキャンセルされるため、フォアグラウンドにいることを停止しServiceません。フォアグラウンドにいることを停止することによってのみキャンセルできます。NotificationNotificationService

当然startForeground()、この後すぐに呼び出して、新しい で状態を復元できますNotification。ティッカー テキストを再度表示する必要がある場合にこれを行う理由の 1 つは、最初にNotification表示されたときにのみ実行されるためです。

この動作は文書化されておらず、なぜNotification. ここで問題の詳細: NotificationManager.cancel() が機能しない

于 2012-07-09T07:33:58.117 に答える
12

Android開発者サイトのRandomMusicPlayer (アーカイブ)アプリは、NotificationManagerを使用してフォアグラウンドサービスの通知を更新するため、フォアグラウンドステータスを保持する可能性はかなり高くなります。

( MusicService.javaクラスのsetUpAsForeground()およびupdateNotification( )を参照してください。)

私の理解では、通知をキャンセルすると、サービスはフォアグラウンドサービスでなくなりますので、注意してください。通知をキャンセルした場合は、startForeground()を再度呼び出して、サービスのフォアグラウンドステータスを復元する必要があります。

于 2011-12-07T22:52:27.530 に答える