

`setStatusBarColor()`を使用してステータスバーを暗くする処理をバックグラウンドで常に行いたいです。

Serviceを継承したクラスでそれを行うと、`getWindow()`でエラーになってしまいます。

Serviceで`getWindow()`を使用する、もしくはServiceで`setStatusBarColor()`を使用する方法を教えていただきたいです。


CC BY-SA 3.0
2015-10-12T07:20:52.210
17547
2015-10-12T09:36:25.493
2015-10-12T09:08:10.297
5337
9850
question
android java
Serviceからステータスバーを暗くしたい


基本的にはできません。

まず、ServiceとはUIを持たないコンポーネントなので、Windowにアタッチされない＝Windowを取得することはできません。

`setStatusBarColor()`というのはAndorid
5.0から追加された比較的新しいAPIになります。これが意図するところは、Lollipop以降のアプリケーションでは、アクションバーやステータスバーの色を利用してアプリのブランディングを行うというものです。それ以前のデザインガイドラインでは、ステータスバーの色は固定で、ブランディングはアプリアイコンをアクションバーに置くことで表現するというものでした。

他のアプリケーションのカラーブランディングを妨害するAPIは恐らく用意されないでしょう。

* * *

ただし完全に不可能かというとそうでもありません。

`WindowManager`の取得はServiceからでも行えるので、そこに任意のビューを重ねることで、それらしく見せること自体はできると思います。ステータスバーの上へ重ねる指定は、SDKのバージョンによって異なりますが、`setStatusBarColor()`のある5.0以降と考えると、`LayoutParams`に`TYPE_STATUS_BAR_PANEL`で可能だと思います。

これについてはリスクのある手段でもありますので、紹介に留めます。


CC BY-SA 3.0
2015-10-12T09:36:25.493
17555
2015-10-12T09:36:25.493
5337
17547
answer