Android13 基座充电屏保

屏幕保护有两个设置可选:默认为插入基座充电时

通过DreamBackend启用屏保,并且保存选择的时机

//QSSI.13\packages\apps\Settings\src\com\android\settings\dream\WhenToDreamPicker.java
@Override
protected boolean setDefaultKey(String key) {
    mBackend.setWhenToDream(DreamSettings.getSettingFromPrefKey(key));
    return true;
}
//QSSI.13\frameworks\base\packages\SettingsLib\src\com\android\settingslib\dream\DreamBackend.java
//启用屏保:
public void startDreaming() {
    logd("startDreaming()");
    if (mDreamManager == null) {
        return;
    }
    try {
        mDreamManager.dream();
    } catch (RemoteException e) {
        Log.w(TAG, "Failed to dream", e);
    }
}
//记录启用时机
public void setWhenToDream(@WhenToDream int whenToDream) {
    setEnabled(whenToDream != NEVER);

    switch (whenToDream) {
        case WHILE_CHARGING:
            setActivatedOnDock(false);
            setActivatedOnSleep(true);
            break;

        case WHILE_DOCKED:
            setActivatedOnDock(true);
            setActivatedOnSleep(false);
            break;

        case EITHER:
            setActivatedOnDock(true);
            setActivatedOnSleep(true);
            break;

        case NEVER:
        default:
            break;
    }
}

public void setActivatedOnDock(boolean value) {
    logd("setActivatedOnDock(%s)", value);
    setBoolean(Settings.Secure.SCREENSAVER_ACTIVATE_ON_DOCK, value);
}

public void setActivatedOnSleep(boolean value) {
    logd("setActivatedOnSleep(%s)", value);
    setBoolean(Settings.Secure.SCREENSAVER_ACTIVATE_ON_SLEEP, value);
}

DreamBackend是对屏保管理的类,最终会通过IDreamManager来执行到DreamManagerService

启动屏保时,先获取系统安装的所有屏保,通过下列代码可以得到我们自己的开发的屏保

PackageManager pm = mContext.getPackageManager();
Intent dreamIntent = new Intent(DreamService.SERVICE_INTERFACE);
List<ResolveInfo> resolveInfos = pm.queryIntentServices(dreamIntent,
       PackageManager.GET_META_DATA);

然后再将屏保设置我们自己开发的

//QSSI.13\frameworks\base\services\core\java\com\android\server\dreams\DreamManagerService.java
public void setActiveDream(ComponentName dream) {
        logd("setActiveDream(%s)", dream);
        if (mDreamManager == null)
            return;
        try {
            ComponentName[] dreams = { dream };
            mDreamManager.setDreamComponents(dream == null ? null : dreams);
        } catch (RemoteException e) {
            Log.w(TAG, "Failed to set active dream to " + dream, e);
        }
    }

如果没有设置,系统会有一个默认的屏保,使用以下方法可以获取默认屏保

//QSSI.13\frameworks\base\services\core\java\com\android\server\dreams\DreamManagerService.java
public ComponentName getDefaultDream() {
        if (mDreamManager == null)
            return null;
        try {
            return m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值