web-dev-qa-db-ja.com

startForeground()が通知を表示しない

Serviceをフォアグラウンドで実行しようとしています。私は この例 を使用しようとしましたが、セクション「サービスをフォアグラウンドで実行する」を探してください)が、startForeground()は使用します実際には私の通知を表示しません。そして、例外はスローされません。表示するには、_ ここ の説明のようにNotificationManagerを使用する必要があります。 NotificationManagerを使用すると、通知は機能しますが、ServicestartForeground()への「サイレント」呼び出しの後でフォアグラウンドになるかどうかはわかりません。

何が悪いのでしょうか?

[〜#〜] edit [〜#〜]:テストしたばかり このサンプルプロジェクトstartForeground()、しかしそれは機能しません!私はAPI v7.0を使用していますが、エミュレーターと実際のデバイス(SE Xperia Neo)の両方でテストしました。通知は表示されません。

EDIT2setForeground()を呼び出そうとすると、_setForeground: ignoring old API call_という警告が表示されます。

here のようにstartForegroundCompat()も使用しようとしましたが、効果はまったく同じです。説明されているように_ActivityManager.RunningServiceInfo_を使用してサービスがフォアグラウンドであるかどうかを確認します ここ 、そして私のサービスはではない前景。

50
Dmitry Frank

idパラメータが_0_...に設定されている場合、startForeground()に通知アイコンが表示されないことに気づきました。

_startForeground(0, notification); // Doesn't work...

startForeground(1, notification); // Works!!!
_

私はそれが誰かがこれにこだわるのに役立つことを願っています。

122
Luka Kama

ベストアンサーに加えて。 setSmallIconを呼び出したかどうかも確認する必要があります。 Androidの電話では、setSmallIconを呼び出さないと、期待どおりの結果が得られません

27
Shaw

DMitry。私はあなたの問題に苦しみ、原因を見つけました。

アプリがコンポーネントの状態を変更している場合PackageManager.setComponentEnabledSetting()) Androidは、フォアグラウンドとその通知アイコンからサービスを削除します。

2011年11月にバグが報告されました

0
Shadowrun

これは古いスレッドの可能性がありますが、私が今学んだこと、まだ言及されていないことを追加したいと思います。

ServiceにバインドされているActivityがあるため、stopSelf()が呼び出された後もServiceがまだ存在している可能性があります。実際のところ、startForeground()は通知を表示することも、この状況で例外を与えることもありません。

0
Teng-pao Yu

私の場合、メッセージの設定にstartForeground(...)のみを使用したため、.setSubText(...)を呼び出した後に通知がありませんでした(ほとんどのデバイスで小さいフォントでレンダリングされるため)。ただし、.setContentText(...)を使用してメッセージを設定しないと、一部のデバイスXiaomi Redmi Note 4は通知を表示しません。

誰かを助けることを願っています

0
Marek Skóra

サービスは開始済みサービスですか、それともバインド済みサービスですか?バインドされたサービスでも同じ問題がありましたが、バインドする前にサービスを開始すると、startForeground(int, notification)を呼び出して通知を表示できました。

0
Tunji_D