質問: `setStatusBarColor()`を使用してステータスバーを暗くする処理をバックグラウンドで常に行いたいです。 Serviceを継承したクラスでそれを行うと、`getWindow()`でエラーになってしまいます。 Serviceで`getWindow()`を使用する、もしくはServiceで`setStatusBarColor()`を使用する方法を教えていただきたいです。
回答: 基本的にはできません。 まず、ServiceとはUIを持たないコンポーネントなので、Windowにアタッチされない=Windowを取得することはできません。 `setStatusBarColor()`というのはAndorid 5.0から追加された比較的新しいAPIになります。これが意図するところは、Lollipop以降のアプリケーションでは、アクションバーやステータスバーの色を利用してアプリのブランディングを行うというものです。それ以前のデザインガイドラインでは、ステータスバーの色は固定で、ブランディングはアプリアイコンをアクションバーに置くことで表現するというものでした。 他のアプリケーションのカラーブランディングを妨害するAPIは恐らく用意されないでしょう。 ただし完全に不可能かというとそうでもありません。 `WindowManager`の取得はServiceからでも行えるので、そこに任意のビューを重ねることで、それらしく見せること自体はできると思います。ステータスバーの上へ重ねる指定は、SDKのバージョンによって異なりますが、`setStatusBarColor()`のある5.0以降と考えると、`LayoutParams`に`TYPE_STATUS_BAR_PANEL`で可能だと思います。 これについてはリスクのある手段でもありますので、紹介に留めます。