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

来源:互联网 发布:win10 telnet 端口23 编辑:程序博客网 时间:2024/06/06 00:58

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)

 

 

 

 

 

 

原创粉丝点击