Service
をフォアグラウンドで実行しようとしています。私は この例 を使用しようとしましたが、セクション「サービスをフォアグラウンドで実行する」を探してください)が、startForeground()
は使用します実際には私の通知を表示しません。そして、例外はスローされません。表示するには、_ ここ の説明のようにNotificationManager
を使用する必要があります。 NotificationManager
を使用すると、通知は機能しますが、Service
がstartForeground()
への「サイレント」呼び出しの後でフォアグラウンドになるかどうかはわかりません。
何が悪いのでしょうか?
[〜#〜] edit [〜#〜]:テストしたばかり このサンプルプロジェクトstartForeground()
、しかしそれは機能しません!私はAPI v7.0を使用していますが、エミュレーターと実際のデバイス(SE Xperia Neo)の両方でテストしました。通知は表示されません。
EDIT2:setForeground()
を呼び出そうとすると、_setForeground: ignoring old API call
_という警告が表示されます。
here のようにstartForegroundCompat()
も使用しようとしましたが、効果はまったく同じです。説明されているように_ActivityManager.RunningServiceInfo
_を使用してサービスがフォアグラウンドであるかどうかを確認します ここ 、そして私のサービスはではない前景。
id
パラメータが_0
_...に設定されている場合、startForeground()
に通知アイコンが表示されないことに気づきました。
_startForeground(0, notification); // Doesn't work...
startForeground(1, notification); // Works!!!
_
私はそれが誰かがこれにこだわるのに役立つことを願っています。
ベストアンサーに加えて。 setSmallIcon
を呼び出したかどうかも確認する必要があります。 Androidの電話では、setSmallIcon
を呼び出さないと、期待どおりの結果が得られません
DMitry。私はあなたの問題に苦しみ、原因を見つけました。
アプリがコンポーネントの状態を変更している場合PackageManager.setComponentEnabledSetting())
Androidは、フォアグラウンドとその通知アイコンからサービスを削除します。
これは古いスレッドの可能性がありますが、私が今学んだこと、まだ言及されていないことを追加したいと思います。
Service
にバインドされているActivity
があるため、stopSelf()
が呼び出された後もService
がまだ存在している可能性があります。実際のところ、startForeground()
は通知を表示することも、この状況で例外を与えることもありません。
私の場合、メッセージの設定にstartForeground(...)
のみを使用したため、.setSubText(...)
を呼び出した後に通知がありませんでした(ほとんどのデバイスで小さいフォントでレンダリングされるため)。ただし、.setContentText(...)
を使用してメッセージを設定しないと、一部のデバイスXiaomi Redmi Note 4は通知を表示しません。
誰かを助けることを願っています
サービスは開始済みサービスですか、それともバインド済みサービスですか?バインドされたサービスでも同じ問題がありましたが、バインドする前にサービスを開始すると、startForeground(int, notification)
を呼び出して通知を表示できました。