需求:实现屏保功能
实现原理:
1、自己写一个服务MyDreamService继承系统的屏保服务DreamService,在该服务中onAttachedToWindow()方法中初始化UI和一些资源,在onDetachedFromWindow()方法释放资源
2、在config.xml文件中替换掉自己原生的屏保服务,添加自己的屏保应用服务
3、在PowerManagerService.java文件中goToSleepNoUpdateLocked()方法中做如下处理:设置屏保时间到了就进入屏保界面、按Power键进入屏保界面
代码路径:
frameworks/base/core/res/res/values/config.xml
frameworks/base/services/core/java/com/android/server/power/Notifier.java
frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
一、如何编写一个屏保应用
1、编写一个服务MyDreamService继承系统的屏保服务DreamService在该服务中onAttachedToWindow()方法中初始化UI和一些资源,在onDetachedFromWindow()方法释放资源
public class MyDreamService extends DreamService {
private static final String TAG = "MyDreamService ";
private static final boolean DEBUG = true;
private ContentResolver resolver;
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
if(DEBUG) Log.i(TAG, “onAttachedToWindow()”);
setInteractive(false);
setFullscreen(true);
View decorView = getWindow().getDecorView();
if(null != decorView){
int visibility = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
decorView.setSystemUiVisibility(visibility);
}
resolver = getContentResolver();
timeChange(true);
initView();
regisBroadCast();
}
private void initView() {
setContentView(R.layout.layout_screen);
}
private void timeChange(boolean isFirstInit) {
setWindowBrightness( 0.4f);
}
private void setWindowBrightness(float brightness) {
if(DEBUG) Log.i(TA