盒子电源管理相关

简介: 盒子电源管理相关

直接上代码

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


目录
相关文章
|
4天前
|
传感器
DIY_实现光敏电阻传感器简单控制LED
DIY_实现光敏电阻传感器简单控制LED
103 2
|
4天前
|
XML 存储 Android开发
Android系统 添加动态控制USB TP触摸方向、触摸唤醒
Android系统 添加动态控制USB TP触摸方向、触摸唤醒
34 0
VS2019显示器颜色调整成护眼模式的颜色
工具 -> 选项 -> 环境 -> 字体和颜色,显示项为“纯文本”,设置项背景色:色调=85,饱和度=123,亮度=205,或者 rgb为199,238,206
|
5月前
|
芯片
LED面板显示屏驱动芯片
一、基本概述 TM1638是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存器、LED驱动、键盘扫描等电路。本产品质量可靠、稳定性好、抗干扰能力强。 二、主要应用场合 主要适用于家电设备(智能热水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、智能电表等数码管或LED显示设备。 三、管脚说明 DIO口输出数据时为N管开漏输出,在读键的时候需要外接1K-10K的上拉电阻。推荐10K的上拉 电阻。DIO在时钟的下降沿控制N管的动作,此时读数时不稳定,在时钟的上升沿读数才时稳定。 四、串行数据传输 读取和接收1个BIT都在时钟的上
50 1
|
6月前
|
安全
可布线开关盒
可布线开关盒是一种用于控制电路的开关装置,通常用于住宅和商业建筑物中的电气系统。它的作用是通过打开或关闭电路来控制电气设备的电源,例如灯,风扇,电视等。
45 0
|
Android开发
4.2 锁屏小部件亮屏时不显示边框
4.2 锁屏小部件亮屏时不显示边框
84 0
4.2 锁屏小部件亮屏时不显示边框
1.2.2认识各个硬件部件
1.2.2认识各个硬件部件
台达B2伺服驱动器操作模式如何设置?伺服驱动器与外围装置如何连接?
本篇我们以台达B2伺服为例来简单介绍一下伺服驱动器操作模式如何设置以及伺服驱动器与外围装置如何连接。
台达B2伺服驱动器操作模式如何设置?伺服驱动器与外围装置如何连接?
|
Java 开发工具 Android开发
利用MCU实现制作一台蓝牙控制小车方法
今天主要和大家分享一下,如何使用MCU自己做一台蓝牙小车,并通过自己写的APP进行控制。
156 0
利用MCU实现制作一台蓝牙控制小车方法
|
传感器 物联网 芯片
5_2_1_光照信息屏_硬件详解|学习笔记
快速学习5_2_1_光照信息屏_硬件详解。
197 0
5_2_1_光照信息屏_硬件详解|学习笔记