RK Android5.1 亮度条、ContentObserver内容观察者模式
一.Setting 里面 亮度条弹窗
1.1.packages/apps/Settings/res/xml/display_settings.xml
1 2 3 4 5 6 | <PreferenceScreen android:key= "brightness" android:title= "@string/brightness" settings:keywords= "@string/keywords_display_brightness_level" > <intent android:action= "android.intent.action.SHOW_BRIGHTNESS_DIALOG" /> </PreferenceScreen> |
1.2.frameworks/base/packages/SystemUI/AndroidManifest.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 | <activity android:name= ".settings.BrightnessDialog" android:label= "@string/quick_settings_brightness_dialog_title" android:theme= "@android:style/Theme.DeviceDefault.Dialog" android:finishOnCloseSystemDialogs= "true" android:launchMode= "singleInstance" android:excludeFromRecents= "true" android:exported= "true" > <intent-filter> <action android:name= "android.intent.action.SHOW_BRIGHTNESS_DIALOG" /> <category android:name= "android.intent.category.DEFAULT" /> </intent-filter> </activity> |
1.3.frameworks\base\packages\SystemUI\src\com\android\systemui\settings\BrightnessDialog.java 亮度条弹框
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class BrightnessDialog extends Activity { private BrightnessController mBrightnessController; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); final Window window = getWindow(); window.setGravity(Gravity.TOP); window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); window.requestFeature(Window.FEATURE_NO_TITLE); //布局文件 setContentView(R.layout.quick_settings_brightness_dialog); final ImageView icon = (ImageView) findViewById(R.id.brightness_icon); //亮度条 final ToggleSlider slider = (ToggleSlider) findViewById(R.id.brightness_slider); mBrightnessController = new BrightnessController( this , icon, slider); } |
1.4. 全场重点来了 BrightnessController 获取设备最大的亮度和最低的亮度值、设置屏幕的亮度、保存和获取当前的亮度值和亮度调节模式
ContentObserver 内容观察者 观察(捕捉)特定Uri引起的数据库的变化 继而做一些相应的处理
这就不用另写线程 去监听数据库的变化 更新UI
推荐的文章 Android中内容观察者的使用---- ContentObserver类详解
ContentObserver类介绍
1 2 3 4 5 6 7 8 | 构造方法 public void ContentObserver(Handler handler) 说明:所有 ContentObserver的派生类都需要调用该构造方法 参数: handler Handler对象。可以是主线程Handler(这时候可以更新UI 了),也可以是任何Handler对象。 常用方法 void onChange( boolean selfChange) 功能:当观察到的Uri发生变化时,回调该方法去处理。所有ContentObserver的派生类都需要重载该方法去处理逻辑。 参数:selfChange |
frameworks\base\packages\SystemUI\src\com\android\systemui\settings\BrightnessController.java
ContentObserver to watch brightness 内部类 BrightnessObserver
onChange 更新亮度条
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | private class BrightnessObserver extends ContentObserver { private final Uri BRIGHTNESS_MODE_URI = Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE); private final Uri BRIGHTNESS_URI = Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS); private final Uri BRIGHTNESS_ADJ_URI = Settings.System.getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ); public BrightnessObserver(Handler handler) { super (handler); } @Override public void onChange( boolean selfChange) { onChange(selfChange, null ); } @Override public void onChange( boolean selfChange, Uri uri) { if (selfChange) return ; try { mExternalChange = true ; if (BRIGHTNESS_MODE_URI.equals(uri)) { updateMode(); updateSlider(); } else if (BRIGHTNESS_URI.equals(uri) && !mAutomatic) { updateSlider(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public BrightnessController(Context context, ImageView icon, ToggleSlider control) { mContext = context; mIcon = icon; mControl = control; mHandler = new Handler(); ……………………………………………… @Override public void onChanged(ToggleSlider view, boolean tracking, boolean automatic, int value) { updateIcon(mAutomatic); if (mExternalChange) return ; if (!mAutomatic) { final int val = value + mMinimumBacklight; setBrightness(val); /*如果当前不是一直按着滑动块而是松手了的话就把那些数据写到数据库里面去。 注意在滑动过程中是直接调用setBrightness(),而不是通过数据库来实现的。但是松手后 才写入数据库的。 */ if (!tracking) { AsyncTask.execute( new Runnable() { public void run() { Settings.System.putIntForUser(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, val, UserHandle.USER_CURRENT); } }); } } |
二.亮度调整显示“当前亮度值xxx”
2.1.Patch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | diff --git a/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml b/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml old mode 100644 new mode 100755 index a996260..8e030a1 --- a/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml +++ b/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml @@ - 18 , 7 + 18 , 12 @@ android:paddingLeft= "16dp" android:paddingRight= "16dp" style= "@style/BrightnessDialogContainer" > - + + <LinearLayout + android:layout_width= "match_parent" + android:layout_height= "wrap_content" + android:orientation= "vertical" > + <ImageView android:id= "@+id/brightness_icon" android:layout_width= "wrap_content" @@ - 31 , 10 + 36 , 36 @@ <com.android.systemui.settings.ToggleSlider android:id= "@+id/brightness_slider" - android:layout_width= "0dp" + android:layout_width= "wrap_content" android:layout_height= "wrap_content" - android:layout_gravity= "center_vertical" - android:layout_weight= "1" + android:layout_gravity= "center" systemui:text= "@string/status_bar_settings_auto_brightness_label" /> + <LinearLayout + android:layout_width= "match_parent" + android:layout_height= "wrap_content" + android:orientation= "horizontal" + android:gravity= "center" > + + <TextView + android:id= "@+id/brightness_now_value" + android:layout_width= "wrap_content" + android:layout_height= "wrap_content" + android:text= "@string/brightness_now_value" + android:textSize= "16sp" + android:textColor= "#FFFFFF" + /> + + <TextView + android:id= "@+id/brightness_slider_value" + android:layout_width= "wrap_content" + android:layout_height= "wrap_content" + android:textSize= "16sp" + android:textColor= "#FFFFFF" /> + + </LinearLayout> + + </LinearLayout> + + </LinearLayout> diff --git a/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml b/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml index 9cc642c..a54c4d0 100755 --- a/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/frameworks/base/packages/SystemUI/res/values-zh-rCN/strings.xml @@ - 437 , 4 + 437 , 5 @@ <string name= "power_sub_close" >关闭系统</string> <string name= "power_sub_sleep" >系统休眠</string> <string name= "power_sub_reboot" >重启系统</string> + <string name= "brightness_now_value" >当前屏幕亮度: </string> </resources> diff --git a/frameworks/base/packages/SystemUI/res/values/strings.xml b/frameworks/base/packages/SystemUI/res/values/strings.xml index d4d7d07..90f7b12 100755 --- a/frameworks/base/packages/SystemUI/res/values/strings.xml +++ b/frameworks/base/packages/SystemUI/res/values/strings.xml @@ - 1003 , 4 + 1003 , 5 @@ <string name= "power_sub_close" >Shutdown</string> <string name= "power_sub_sleep" >Go to Sleep</string> <string name= "power_sub_reboot" >Reboot</string> + <string name= "brightness_now_value" >Current screen brightness: </string> </resources> diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java old mode 100644 new mode 100755 index 4dacacf..c30625d --- a/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ - 106 , 7 + 106 , 8 @@ public class QSPanel extends ViewGroup { mBrightnessController = new BrightnessController(getContext(), (ImageView) findViewById(R.id.brightness_icon), - (ToggleSlider) findViewById(R.id.brightness_slider)); + (ToggleSlider) findViewById(R.id.brightness_slider), + (TextView) findViewById(R.id.brightness_slider_value)); mDetailDoneButton.setOnClickListener( new OnClickListener() { @Override diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java old mode 100644 new mode 100755 index 946a3d1..84cfe50 --- a/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java +++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java @@ - 31 , 6 + 31 , 7 @@ import android.os.UserHandle; import android.provider.Settings; import android.widget.CompoundButton; import android.widget.ImageView; + import android.widget.TextView; import com.android.systemui.R; @@ - 51 , 6 + 52 , 7 @@ public class BrightnessController implements ToggleSlider.Listener { private final Context mContext; private final ImageView mIcon; + private final TextView mText_brightness; private final ToggleSlider mControl; private final boolean mAutomaticAvailable; private final IPowerManager mPower; @@ - 133 , 10 + 135 , 11 @@ public class BrightnessController implements ToggleSlider.Listener { } - public BrightnessController(Context context, ImageView icon, ToggleSlider control) { + public BrightnessController(Context context, ImageView icon, ToggleSlider control ,TextView text_brightness) { mContext = context; mIcon = icon; mControl = control; + mText_brightness = text_brightness; mHandler = new Handler(); mUserTracker = new CurrentUserTracker(mContext) { @Override @@ - 301 , 6 + 304 , 7 @@ public class BrightnessController implements ToggleSlider.Listener { UserHandle.USER_CURRENT); mControl.setMax(mMaximumBacklight - mMinimumBacklight); mControl.setValue(value - mMinimumBacklight); + mText_brightness.setText( " " +value); } } diff --git a/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java b/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java old mode 100644 new mode 100755 index a1704ff..2a4a720 --- a/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java +++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java @@ - 27 , 6 + 27 , 7 @@ import android.view.KeyEvent; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; + import android.widget.TextView; import com.android.systemui.R; @@ - 49 , 7 + 50 , 8 @@ public class BrightnessDialog extends Activity { final ImageView icon = (ImageView) findViewById(R.id.brightness_icon); final ToggleSlider slider = (ToggleSlider) findViewById(R.id.brightness_slider); - mBrightnessController = new BrightnessController( this , icon, slider); + final TextView brightness_value = (TextView) findViewById(R.id.brightness_slider_value); + mBrightnessController = new BrightnessController( this , icon, slider , brightness_value); } @Override |
分类:
RockChip
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2020-10-28 Android7.1 锁屏滑动无法解锁 Notification Keyguard 显示通知锁屏