android制作与通知栏亮度条完全同步的第三方亮度条

因为通知栏亮度条与Settings上的亮度条是一致的,当改变一方时,另一方也会同步改变。
1.Settings上的亮度条同步是在display_settings.xml里通过android.intent.action.SHOW_BRIGHTNESS_DIALOG获取;
2.而通知栏上的亮度条状态及操作在SystemUI的settings目录下,有BrightnessController.java,BrightnessDialog.java,CurrentUserTracker.java,ToggleSeekBar.java,ToggleSlider.java五个文件里;
BrightnessController.java:控制显示亮度
BrightnessDialog.java:显示亮度的Activity,实例化以上类的对象显示亮度条及状态
CurrentUserTracker.java:广播处理器,被BrightnessController调用
ToggleSeekBar.java:SeekBar控件定义
ToggleSlider.java:布局ToggleSlider定义,包含ToggleSeekBar
3.如果要实现与通知栏一致的亮度条,要在自己的Activity里调用BrightnessController的构造方法,其他关联文件搞到自己的目录就OK了;
4.开发版本要注意:android5.0与其以下版本由于操作显示不一样(android5.0在自动调节时,亮度条值会停在上一次自动停留的值上;切换到自动调节时,亮度条值会与上一次手动值一致。5.0以下在自动模式下,亮度条值停在上一次手动值上。),因此他们的代码也不同(具体可对照以上5个文件的源码),强调如果在5.0上修改,记得在Activity的start方法里调用registerCallbacks()回收状态值方法。


设置成自动调节亮度后,我们还可以手动拉一下亮度条,然后系统会以我们设置的这个亮度为基准,根据环境来适当调节亮度。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 12的SystemUI下拉框中的亮度的显示隐藏流程如下: 1. 下拉通知时,SystemUI会发送一个通知展开的广播,应用可以通过监听该广播来响应下拉通知的事件。 2. 在通知展开的回调方法中,应用可以根据当前的亮度调节状态来判断是否需要显示亮度。 3. 如果需要显示亮度,则可以获取亮度的控件引用,并设置其可见性为可见。如果不需要显示亮度,则将其可见性设置为不可见。 4. 当通知被收起时,SystemUI会发送一个通知收起的广播,应用可以通过监听该广播来响应通知收起的事件。 5. 在通知收起的回调方法中,应用可以将亮度的可见性设置为不可见。 具体实现步骤可以参考以下代码示例: ``` public class MyNotificationListener extends NotificationListenerService { private SeekBar mBrightnessSeekBar; @Override public void onNotificationPosted(StatusBarNotification sbn) { // 检测到通知展开事件 if (sbn.getNotification().fullScreenIntent != null) { // 获取亮度调节状态 boolean isAdjustBrightness = isAdjustBrightness(sbn); // 如果需要显示亮度 if (isAdjustBrightness) { // 获取亮度控件的引用 mBrightnessSeekBar = findViewById(R.id.brightness_seekbar); // 设置亮度的可见性为可见 mBrightnessSeekBar.setVisibility(View.VISIBLE); } } } @Override public void onNotificationRemoved(StatusBarNotification sbn) { // 检测到通知收起事件 if (sbn.getNotification().fullScreenIntent != null) { // 如果亮度控件存在,将其可见性设置为不可见 if (mBrightnessSeekBar != null) { mBrightnessSeekBar.setVisibility(View.GONE); } } } // 判断是否需要显示亮度 private boolean isAdjustBrightness(StatusBarNotification sbn) { Bundle extras = sbn.getNotification().extras; int flags = extras.getInt(Notification.EXTRA_FLAGS); return (flags & Notification.FLAG_AUTO_BRIGHTNESS) == 0 && (flags & Notification.FLAG_HIGH_PRIORITY) != 0; } } ``` 需要注意的是,具体实现可能会根据不同的设备厂商或Android版本而有所不同,需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值