Android 深色模式

private UiModeManager mUiModeManager;
mUiModeManager = mContext.getSystemService(UiModeManager.class);
mUiModeManager.setNightModeActivated(true);

frameworks/base/core/java/android/app/UiModeManager.java

/**
 * Activating night mode for the current user
 *
 * @return {@code true} if the change is successful
 * @hide
 */
public boolean setNightModeActivated(boolean active) {
    if (mService != null) {
        try {
            return mService.setNightModeActivated(active);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }
    return false;
}

frameworks/base/services/core/java/com/android/server/UiModeManagerService.java

@Override
public boolean setNightModeActivated(boolean active) {
    if (isNightModeLocked() && (getContext().checkCallingOrSelfPermission(
            android.Manifest.permission.MODIFY_DAY_NIGHT_MODE)
            != PackageManager.PERMISSION_GRANTED)) {
        Slog.e(TAG, "Night mode locked, requires MODIFY_DAY_NIGHT_MODE permission");
        return false;
    }
    final int user = Binder.getCallingUserHandle().getIdentifier();
    if (user != mCurrentUser && getContext().checkCallingOrSelfPermission(
            android.Manifest.permission.INTERACT_ACROSS_USERS)
            != PackageManager.PERMISSION_GRANTED) {
        Slog.e(TAG, "Target user is not current user,"
                + " INTERACT_ACROSS_USERS permission is required");
        return false;
    }
    synchronized (mLock) {
        final long ident = Binder.clearCallingIdentity();
        try {
            if (mNightMode == MODE_NIGHT_AUTO || mNightMode == MODE_NIGHT_CUSTOM) {
                unregisterScreenOffEventLocked();
                mOverrideNightModeOff = !active;
                mOverrideNightModeOn = active;
                mOverrideNightModeUser = mCurrentUser;
                persistNightModeOverrides(mCurrentUser);
            } else if (mNightMode == UiModeManager.MODE_NIGHT_NO
                    && active) {
                mNightMode = UiModeManager.MODE_NIGHT_YES;
            } else if (mNightMode == UiModeManager.MODE_NIGHT_YES
                    && !active) {
                mNightMode = UiModeManager.MODE_NIGHT_NO;
            }
            updateConfigurationLocked();
            applyConfigurationExternallyLocked();
            persistNightMode(mCurrentUser);
            return true;
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }
}

监听省电模式变化

private final BroadcastReceiver mBatterySaverReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        mCallback.run();
    }
};

final IntentFilter batteryFilter = new IntentFilter();
batteryFilter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
mContext.registerReceiver(
        mBatterySaverReceiver, batteryFilter);

监听暗黑UI模式变化

public DarkModeObserver(Context context) {
    mContext = context;
    mContentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
        @Override
        public void onChange(boolean selfChange, Uri uri) {
            super.onChange(selfChange, uri);
            final String setting = uri == null ? null : uri.getLastPathSegment();
            if (setting != null && mCallback != null) {
                mCallback.run();
            }
        }
    };
}

final Uri uri = Settings.Secure.getUriFor(Settings.Secure.UI_NIGHT_MODE);
final Uri customStart =
        Settings.Secure.getUriFor(Settings.Secure.DARK_THEME_CUSTOM_START_TIME);
final Uri customEnd =
        Settings.Secure.getUriFor(Settings.Secure.DARK_THEME_CUSTOM_END_TIME);
mContext.getContentResolver()
        .registerContentObserver(uri, false, mContentObserver);
mContext.getContentResolver()
        .registerContentObserver(customStart, false, mContentObserver);
mContext.getContentResolver()
        .registerContentObserver(customEnd, false, mContentObserver);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值