jQuery鼠标指针特效

关于Android`系统默认屏保`

frameworks\base\core\res\res\values\config.xml
//默认打开
<bool name="config_dreamsEnabledByDefault">true</bool>

//允许任何时候都可进入屏保,
<bool name="config_dreamsEnabledOnBattery">true</bool>

//充电时是否默认打开屏保
<bool name="config_dreamsActivatedOnDockByDefault">false</bool>

//屏保应用
<!-- ComponentName of the default dream (Settings.Secure.DEFAULT_SCREENSAVER_COMPONENT) -->
<string name="config_dreamsDefaultComponent"translatable="false">com.google.android.deskclock/com.android.deskclock.Screensaver</string>

adb shell settings put system screen_off_timeout 2147483647 息屏休眠

adb shell settings get secure screensaver_components
com.android.deskclock/com.android.deskclock.Screensaver(时钟)

adb shell settings get secure screensaver_components
com.android.dreams.basic/com.android.dreams.basic.Colors (万花筒)

1,用户设置Settings.Secure.SCREENSAVER_COMPONENTS 的值
 public static final String SCREENSAVER_COMPONENTS = "screensaver_components"
 
2,如果用户没有设置,则使用默认屏保,默认屏保的在default.xml中配置,配置config_dreamsDefaultComponent 值即可。

屏保启动过程:
\frameworks\base\services\core\java\com\android\server\dreams\DreamManagerService.java
private final class LocalService extends DreamManagerInternal {
        @Override
        public void startDream(boolean doze) {
            startDreamInternal(doze);
        }
        
private void startDreamInternal(boolean doze) {
        final int userId = ActivityManager.getCurrentUser();
        final ComponentName dream = chooseDreamForUser(doze, userId);//1.选择屏保页 
       if (dream != null) {
            synchronized (mLock) {
                startDreamLocked(dream, false /*isTest*/, doze, userId);//2.启动屏保
            }
        }
        
 private ComponentName chooseDreamForUser(boolean doze, int userId) {
        if (doze) {
            ComponentName dozeComponent = getDozeComponent(userId);
            return validateDream(dozeComponent) ? dozeComponent : null;
            }
        ComponentName[] dreams = getDreamComponentsForUser(userId);
        return dreams != null && dreams.length != 0 ? dreams[0] : null;

private ComponentName[] getDreamComponentsForUser(int userId) {
    //1.获取Settings.Secure.SCREENSAVER_COMPONENTS提供的屏保,如果这个值为null,
    //2.走系统默认的getDefaultDreamComponentForUser
	String names = Settings.Secure.getStringForUser(mContext.getContentResolver(),
	 					Settings.Secure.SCREENSAVER_COMPONENTS,
                			userId);
     ComponentName[] components = componentsFromString(names);
     // first, ensure components point to valid services
      List<ComponentName> validComponents = new ArrayList<ComponentName>();
      if (components != null) {
            for (ComponentName component : components) {
                if (validateDream(component)) {
                    validComponents.add(component);
                }
      // fallback to the default dream component if necessary
        if (validComponents.isEmpty()) {
            //上面为null,这里获取默认的屏保
            ComponentName defaultDream = getDefaultDreamComponentForUser(userId);
            if (defaultDream != null) {
                Slog.w(TAG, "Falling back to default dream " + defaultDream);
                validComponents.add(defaultDream);
            }
       }
      return validComponents.toArray(new ComponentName[validComponents.size()]);
      }

 //选择完了屏保,然后就是启动的流程,mController->DreamController
 private void startDreamLocked(final ComponentName name,
            final boolean isTest, final boolean canDoze, final int userId) {
            .......
             mHandler.post(wakeLock.wrap(
                () -> mController.startDream(newToken, name, isTest, canDoze, userId, wakeLock)));
   }    
   
   
frameworks\base\services\core\java\com\android\server\dreams\DreamController.java
public void startDream(Binder token, ComponentName name,
            boolean isTest, boolean canDoze, int userId, PowerManager.WakeLock wakeLock) {
        stopDream(true /*immediate*/);
        ......
        //最后通过bindServiceAsUser 启动之前找到的DreamService服务(屏保)
         if (!mContext.bindServiceAsUser(intent, mCurrentDream,
                        Context.BIND_AUTO_CREATE | Context.BIND_FOREGROUND_SERVICE,
                        new UserHandle(userId))) {
         ......


ending --控制屏保在什么情况打开,显示(充电时,基座充电时或两者皆可)

frameworks\base\services\core\java\com\android\server\power\PowerManagerService.java
//是否打开屏保
mDreamsEnabledSetting = (Settings.Secure.getIntForUser(resolver,
        Settings.Secure.SCREENSAVER_ENABLED,
        mDreamsEnabledByDefaultConfig ? 1 : 0,
        UserHandle.USER_CURRENT) != 0);
        
//仅充电时设置此值为1 public static final String SCREENSAVER_ACTIVATE_ON_DOCK = "screensaver_activate_on_dock";    
mDreamsActivateOnSleepSetting = (Settings.Secure.getIntForUser(resolver,
        Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP,
        mDreamsActivatedOnSleepByDefaultConfig ? 1 : 0,
        UserHandle.USER_CURRENT) != 0);
        
//基座充电时,此值为1  public static final String SCREENSAVER_ACTIVATE_ON_SLEEP = "screensaver_activate_on_sleep";
 public static final String SCREENSAVER_ACTIVATE_ON_DOCK = "screensaver_activate_on_dock";
mDreamsActivateOnDockSetting = (Settings.Secure.getIntForUser(resolver,
        Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK,
        mDreamsActivatedOnDockByDefaultConfig ? 1 : 0,
        UserHandle.USER_CURRENT) != 0);

都为1,两者皆可,一个为1,为1的正确

都为true,两者皆可!!!
 /frameworks/base/core/res/res/values/config.xml
    <!-- If supported, are dreams enabled? (by default) -->
    <bool name="config_dreamsEnabledByDefault">true</bool>
    <!-- If supported and enabled, are dreams activated when docked? (by default) -->
    <bool name="config_dreamsActivatedOnDockByDefault">true</bool>
    <!-- If supported and enabled, are dreams activated when asleep and charging? (by default) -->
    <bool name="config_dreamsActivatedOnSleepByDefault">true</bool>

Android ScreenSaver分析-CSDN博客

Android 10 如何自定义屏保功能-CSDN博客

Android P 屏保和休眠相关知识_android 屏保-CSDN博客

Android13 基座充电屏保-CSDN博客

posted @ 2024-05-25 15:41  僵小七  阅读(200)  评论(0编辑  收藏  举报