盒子电源管理相关

简介: 盒子电源管理相关

直接上代码

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);
            }
        }


目录
相关文章
|
调度
MacBookPro外接显示器程序全屏状态,另一个显示器就黑屏
MacBookPro外接显示器程序全屏状态,另一个显示器就黑屏
708 0
MacBookPro外接显示器程序全屏状态,另一个显示器就黑屏
|
2月前
|
监控 IDE 机器人
基于Nodemcu的手机控制小车
基于Nodemcu的手机控制小车
40 0
|
4月前
|
Windows
显示器设置
显示器设置
55 2
|
4月前
|
存储 自然语言处理
Uniop ePAD03 配备图形显示屏的人机界面
ePAD03 和 ePAD04 面板是紧凑且低成本的人机界面,具有单色图形显示屏(120x32像素),支持可下载字体、缩放文本及用户可编程功能键和LED指示灯。其工作温度范围广泛,适用于极端环境。产品具备双驱动通信,支持多种工业总线系统和以太网连接,前面板防护等级达IP65。相比MD00系列,ePAD03 和 ePAD04 性能更优,提供强大编程功能和多语言支持,适合各种工业应用。
|
编解码 数据挖掘 iOS开发
一台主机外接两台显示器
一台主机外接两台显示器
759 4
|
芯片
LED面板显示屏驱动芯片
一、基本概述 TM1638是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动、键盘扫描等电路。本产品质量可靠、稳定性好、抗干扰能力强。 二、主要应用场合 主要适用于家电设备(智能热水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、智能电表等数码管或LED显示设备。 三、管脚说明 DIO口输出数据时为N管开漏输出,在读键的时候需要外接1K-10K的上拉电阻。推荐10K的上拉 电阻。DIO在时钟的下降沿控制N管的动作,此时读数时不稳定,在时钟的上升沿读数才时稳定。 四、串行数据传输 读取和接收1个BIT都在时钟的上
HMI-43-【节能模式】顶部标题栏和底部信息栏及灯光及启动动画
今天来实现以下节能模式的Title底部信息栏,灯光系统,以及启动动画。
HMI-43-【节能模式】顶部标题栏和底部信息栏及灯光及启动动画
|
安全
可布线开关盒
可布线开关盒是一种用于控制电路的开关装置,通常用于住宅和商业建筑物中的电气系统。它的作用是通过打开或关闭电路来控制电气设备的电源,例如灯,风扇,电视等。
74 0
台达B2伺服驱动器操作模式如何设置?伺服驱动器与外围装置如何连接?
本篇我们以台达B2伺服为例来简单介绍一下伺服驱动器操作模式如何设置以及伺服驱动器与外围装置如何连接。
台达B2伺服驱动器操作模式如何设置?伺服驱动器与外围装置如何连接?
|
Android开发
4.2 锁屏小部件亮屏时不显示边框
4.2 锁屏小部件亮屏时不显示边框
116 0
4.2 锁屏小部件亮屏时不显示边框