前回アプリのバックグラウンド処理で困り、回避方法としてメモ書きした「②Context.startForegroundService()を使用する」について実際にためしたところさらに困ったので内容記載します。
先に結論から記載すると
・BroadcastReceiverはもう使用できない
・プッシュ通知はfcmに変更しなければならない
そもそもの発端はアプリのプッシュ通知にgcmを使用していたのですが、android8の端末にてエラーが発生していました。
調べたところバックグラウンド処理にてサービスを起動した場合エラーになることがわかりました。
ネットで調べたところ回避方法の1つとして「Context.startForegroundService()」を使用するとバックグラウンドでサービスを起動できるとあったので試しました。
「Context.startForegroundService()」に変更したところ、アプリを起動している状態でプッシュ通知が正しく動きました。
アプリを完全に停止ではなく裏に隠した状態でのプッシュ通知を行っても正しく動きました。
しかし、アプリをバックグラウンドで起動していない状態でgcmでプッシュ通知を行うとBroadcastReceiverからサービス起動の時点でシステムエラーが発生しました。
回避方法を探しながらいろいろためしたのですが結局無理でした。
まぁgcmは随分前からfcmに移行するようにと話があったので、あきらめてfcmに移行することにしました。
古くなったものをいつまでも使用せずに、素直にさっさと新しいものに変えてしまったほうが、大変そうですが結局近道になるといういい教訓でした・・・