android settings---------BrightnessPreference.java(亮度设置)

本文详细解析了Android系统中亮度调节的信号流程与实现原理,包括如何通过ContentObserver观察亮度变化并作出响应,以及如何通过进度条手动设置亮度。

1,信号流程:
            BrightnessPreference ---->onBindDialogView(getBrightness)---->showDialog---->onPreferenceTreeClick---->onProgressChanged(若有变化才会进来)(setBrightness)----->onDialogClosed---->ContentObserver-mBrightnessObserver----->onBrightnessChanged(getBrightness).

 

2,相关知识点:

    ContentObserver——内容观察者,目的是观察(捕捉)特定Uri引起的数据库的变化,继而做一些相应的处理
     *  观察特定Uri的步骤如下:
     *  1、    创建我们特定的ContentObserver派生类,必须重载父类构造方法,必须重载onChange()方法去处理回调后的功能实现
     *  2、    利用context.getContentResolover()获得ContentResolove对象,接着调用registerContentObserver()方法去注册内容观察者
     *  3、    由于ContentObserver的生命周期不同步于Activity和Service等,因此,在不需要时,需要手动的调用
             unregisterContentObserver()去取消注册。
     * 
     *  总结: 使用ContentObserver的情况主要有一下两者情况:
              1、需要频繁检测的数据库或者某个数据是否发生改变,如果使用线程去操作,很不经济而且很耗时 ;
              2、在用户不知晓的情况下对数据库做一些事件,比如:悄悄发送信息、拒绝接受短信黑名单等;

 

*public final void  registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)
 * 功能:为指定的Uri注册一个ContentObserver派生类实例,当给定的Uri发生改变时,回调该实例对象去处理。
 * 参数:uri          需要观察的Uri(需要在UriMatcher里注册,否则该Uri也没有意义了)
 * notifyForDescendents  为false 表示精确匹配,即只匹配该Uri
                                                                     为true 表示可以同时匹配其派生的Uri
 * observer       ContentObserver的派生类实例
 *
 *
 *  public final void  unregisterContentObserver(ContentObserver observer)
 *  功能:取消对给定Uri的观察
          参数: observer ContentObserver的派生类实例

3,public void onProgressChanged(SeekBar seekBar, int progress,boolean fromTouch)----------------------手动模式下,通过进度条控件设置亮度;

   public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)---------------------选中自动或手动调整亮度;

  private void setBrightness(int brightness)-------------这是设置亮度!它通过调用PowerManager(framework\base\core\java\android\os\PowerManager.java)及PowerManagerService(framework\base\service\java\com\android\server\PowerManagerService.java)的接口 来调整高度.PowerManagerService中定义的mButtonLight和mKeyboardLight都是键盘灯,具体使用哪一个,要看底层的平台厂商使用 public void setBacklightBrightness(int brightness);

(framework\base\service\java\com\android\server\LightsService.java)

(framework\base\services\jni\com_android_server_LightsService.cpp)

 

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值