盒子电源管理相关

简介: 盒子电源管理相关

直接上代码

1.从屏保界面 唤醒盒子

    private void awakenFromDream(){
        IDreamManager dreamManager = IDreamManager.Stub.asInterface(
                ServiceManager.getService(DreamService.DREAM_SERVICE));
        try{
            if (dreamManager != null && dreamManager.isDreaming()){
                Log.d(TAG,"Wake up from dream.");
                dreamManager.awaken();
            }
        } catch (Exception e){
            Log.e(TAG,"Cannot awaken from dream,because " + e.getMessage());
        }
    }

frameworks\base\core\java\android\service\dreams\IDreamManager.aidl

IDreamManager为aidl接口,具体实现在 BinderService里,BinderService是DreamManagerService的内部类

private final class BinderService extends IDreamManager.Stub {

frameworks\base\services\core\java\com\android\server\dreams\DreamManagerService.java

        @Override // Binder call
        public void awaken() {
            checkPermission(android.Manifest.permission.WRITE_DREAM_STATE);
 
            final long ident = Binder.clearCallingIdentity();
            try {
                requestAwakenInternal();
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }

2.进入 真待机

private void shutDown(){
    Slog.d(TAG, "Device will shut down immediately.");
        final long ident = Binder.clearCallingIdentity();
        try {
            shutdownOrRebootInternal(HALT_MODE_SHUTDOWN, false, "userrequested", false);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
  }

3.进入 假待机

  private void sleep(){
    Slog.d(TAG, "Device will go to sleep immediately.");
    synchronized (mLock) {
            if (goToSleepNoUpdateLocked(SystemClock.uptimeMillis(),PowerManager.GO_TO_SLEEP_REASON_TIMEOUT, 0, Process.SYSTEM_UID)) {
                updatePowerStateLocked();
            }
        }
  }

4.进入屏保

  private void startDream(){
        IDreamManager dreamManager = IDreamManager.Stub.asInterface(
                ServiceManager.getService(DreamService.DREAM_SERVICE));
        try{
            if (dreamManager != null && dreamManager.isDreaming()){
                Log.d(TAG,"Wake up from dream.");
                dreamManager.dream();
            }
        } catch (Exception e){
            Log.e(TAG,"Cannot awaken from dream,because " + e.getMessage());
        }
    }

5.待机唤醒

frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

    private void wakeUpFromPowerKey(long eventTime) {
        if (wakeUp(eventTime, mAllowTheaterModeWakeFromPowerKey,
                PowerManager.WAKE_REASON_POWER_BUTTON, "android.policy:POWER")) {
            // Start HOME with "reason" extra if sleeping for more than mWakeUpToLastStateTimeout
            if (shouldWakeUpWithHomeIntent()) {
                startDockOrHome(DEFAULT_DISPLAY, /*fromHomeKey*/ false, /*wakenFromDreams*/ true,
                        PowerManager.wakeReasonToString(PowerManager.WAKE_REASON_POWER_BUTTON));
            }
        }
    }
 
    private void wakeUpFromWakeKey(KeyEvent event) {
        if (wakeUp(event.getEventTime(), mAllowTheaterModeWakeFromKey,
                PowerManager.WAKE_REASON_WAKE_KEY, "android.policy:KEY")) {
            // Start HOME with "reason" extra if sleeping for more than mWakeUpToLastStateTimeout
            if (shouldWakeUpWithHomeIntent() && event.getKeyCode() == KEYCODE_HOME) {
                startDockOrHome(DEFAULT_DISPLAY, /*fromHomeKey*/ true, /*wakenFromDreams*/ true,
                        PowerManager.wakeReasonToString(PowerManager.WAKE_REASON_WAKE_KEY));
            }
        }
    }
 
    private boolean wakeUp(long wakeTime, boolean wakeInTheaterMode, @WakeReason int reason,
            String details) {
        final boolean theaterModeEnabled = isTheaterModeEnabled();
        if (!wakeInTheaterMode && theaterModeEnabled) {
            return false;
        }
 
        if (theaterModeEnabled) {
            Settings.Global.putInt(mContext.getContentResolver(),
                    Settings.Global.THEATER_MODE_ON, 0);
        }
 
        mPowerManager.wakeUp(wakeTime, reason, details);
 
        // Turn on the connected TV and switch HDMI input if we're a HDMI playback device.
        final HdmiControl hdmiControl = getHdmiControl();
        if (hdmiControl != null) {
            hdmiControl.turnOnTv();
        }
        return true;
    }

frameworks\base\services\core\java\com\android\server\power\PowerManagerService.java

 @Override // Binder call
        public void wakeUp(long eventTime, @WakeReason int reason, String details,
                String opPackageName) {
            if (eventTime > mClock.uptimeMillis()) {
                throw new IllegalArgumentException("event time must not be in the future");
            }
 
            mContext.enforceCallingOrSelfPermission(
                    android.Manifest.permission.DEVICE_POWER, null);
 
            final int uid = Binder.getCallingUid();
            final long ident = Binder.clearCallingIdentity();
            try {
                wakeUpInternal(eventTime, reason, details, uid, opPackageName, uid);
            } finally {
                Binder.restoreCallingIdentity(ident);
            }
        }


目录
相关文章
|
10月前
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
393 25
|
Kotlin
Kotlin中继承、类型转换、Any超类、object关键字详解
Kotlin中继承、类型转换、Any超类、object关键字详解
409 0
|
存储 安全 Shell
Android系统 adb shell auth授权使用
Android系统 adb shell auth授权使用
1746 2
|
存储 SQL OLAP
雪花模式(Snowflake Schema)
雪花模式(Snowflake Schema)是一种常用于数据仓库设计的数据模型,是在星形模式(Star Schema)基础上进行维度表的规范化拆分的扩展形式。与星形模式不同,雪花模式将一些维度表进一步规范化为多个维度表,以减少冗余和数据存储空间。
1311 1
|
存储 传感器 编解码
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
3893 1
|
NoSQL 容器 消息中间件
rtsp-simple-server + srs搭建流媒体服务器
rtsp-simple-server + srs搭建流媒体服务器
1835 0
|
存储 缓存 NoSQL
深入了解 Linux PageCache 页缓存:优化文件系统的性能、效率(一)
深入了解 Linux PageCache 页缓存:优化文件系统的性能、效率
3730 1
|
8天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1404 10
|
8天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
1274 6

热门文章

最新文章