应用程序如何检测状态栏颜色(Android 5.0 Lollipop)?

Posted

技术标签:

【中文标题】应用程序如何检测状态栏颜色(Android 5.0 Lollipop)?【英文标题】:How can an app detect the status bar color (Android 5.0 Lollipop)? 【发布时间】:2015-02-12 22:31:03 【问题描述】:

当我遇到Window#getStatusBarColor() 时,我一直在玩弄 android 5.0 Lollipop API。但是,这需要Window 的实例,例如来自Activity,因此它不能在后台服务中使用。有没有办法让应用在 Android 5.0 上检测状态栏颜色?

更新

正如 Nikola Despotoski 所提到的,createScreenCaptureIntent 方法可以通过“屏幕录制”来解决问题,并且只需检查状态栏区域。 事实证明,这个方法的返回值如果传递给startActivityForResult。初始请求是从 Activity 调用的。 即使结果被保存并传递给服务,每次需要时都需要一些复杂的模式来重新请求许可。似乎也没有同步方式来获取位图。在后台,这意味着总是处理屏幕变化以获得单个像素。

【问题讨论】:

【参考方案1】:

有趣的问题。

您可以使用新的 Lolipop 屏幕截图 API。使用createScreenCaptureIntent() 和MediaProjectionManager 检索Bitmap

获得位图后,尝试将位图从顶部=0 剪切(解码)到底部=status_bar_height。将剪切Bitmap 传递给Palette 并使用getRGB() 方法检索颜色。

【讨论】:

我想过这个,但是在CPU方面似乎过于复杂和昂贵(尤其是在快速切换应用的情况下)。

以上是关于应用程序如何检测状态栏颜色(Android 5.0 Lollipop)?的主要内容,如果未能解决你的问题,请参考以下文章

更改 Android 5.0 操作栏颜色

android 5.0的颜色

android 5.0的颜色

Android最佳实践之SystemBar状态栏全版本适配方案

android 状态栏和虚拟按键栏字体背景颜色设置

android 状态栏和虚拟按键栏字体背景颜色设置