关闭休眠仅熄屏

Platform:RK3399
OS:Android:7.1.2
参考:
1. https://ask.csdn.net/questions/673694
2. https://www.optbbs.com/thread-4216693-1-1.html

概述

产品需求:在熄屏状态下也可以随时响应语音唤醒.而且主要功能可以使用.由于早期设计的时候全部采用了低功耗硬件设计,所以在真实修休眠下许多功能都不可用.所以只有临时采用只熄屏不休眠的方式实现,后续迭代再修改硬件电路设计.

关闭休眠

关闭系统休眠有两步操作:1.关闭power键的休眠功能,关闭系统自带的超时休眠.

按键休眠

去掉dts中power键的wakeup功能

 power-key {
   gpios = <&gpio0 5 1>;
   linux,code = <116>;
   label = "power";
-  gpio-key,wakeup;
  };

关闭power按键的短按休眠功能

diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index c63eb68a..d84c9948 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -828,7 +828,7 @@
    <!-- Control the behavior when the user short presses the power button.
             0 - Nothing
             1 - Go to sleep (doze)
             2 - Really go to sleep (don't doze)
             3 - Really go to sleep and go home (don't doze)
     -->
-    <integer name="config_shortPressOnPowerBehavior">1</integer>
+    <integer name="config_shortPressOnPowerBehavior">0</integer>
 
     <!-- Control the behavior when the user double presses the power button.
             0 - Nothing

所有通过KEY_CODE 26休眠的操作都会失效

超时休眠

方法一:

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

int timeout = mScreenOffTimeoutSetting;
+ if (timeout < 0) {
+ return mMaximumScreenOffTimeoutFromDeviceAdmin;
+ }

frameworks\base\packages\SettingsProvider\res\values\defaults.xml

--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -18,7 +18,7 @@
 -->
 <resources>
     <bool name="def_dim_screen">true</bool>
-    <integer name="def_screen_off_timeout">2147483647</integer>
+    <integer name="def_screen_off_timeout">-1</integer>
     <integer name="def_sleep_timeout">-1</integer>
     <bool name="def_airplane_mode_on">false</bool>

方法二:

修改frameworks\base\packages\SettingsProvider\res\values\defaults.xml

 <resources>
     <bool name="def_dim_screen">true</bool>
     <integer name="def_screen_off_timeout">2147483647</integer>
     <integer name="def_sleep_timeout">-1</integer>
     <bool name="def_airplane_mode_on">false</bool>

将def_screen_off_timeout改为2147483647,默认为60000

device/rockchip/common/devices.mk

ifeq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)), box)
include device/rockchip/common/samba/rk31_samba.mk
PRODUCT_PROPERTY_OVERRIDES += \
    ro.rk.screenoff_time=2147483647
else ifeq ($(strip $(TARGET_BOARD_PLATFORM_PRODUCT)), tablet)
PRODUCT_PROPERTY_OVERRIDES += \
    ro.rk.screenoff_time=2147483647
else
PRODUCT_PROPERTY_OVERRIDES += \
    ro.rk.screenoff_time=60000
endif

将else下面改为:2147483647

熄屏操作

单独熄屏

走Android系统调用会进入休眠.所有需要单独熄屏.

可以通过JNI来控制背光实现.

/*LCD backlight*/
static int set_screen(u32 arg)
{
    char *path = "/sys/class/backlight/backlight/brightness";
    char brightness[3] = {'1','7','9'};
    int ret = 0;

    if((arg != SCREEN_ON) && (arg != SCREEN_OFF)){
        LOGE("Command is err,arg is %d.",arg);
        return -EINVAL;
    }

    int fd = open(path,O_RDWR);
    if(fd < 0){
        LOGE("Cannot open brightness.");
        return fd;
    }

   if(arg == SCREEN_ON){
        ret = write(fd,&brightness,(size_t)3);
    }
    else{
        brightness[0] = '0';
        ret = write(fd,&brightness,(size_t)1);
    }
    if(ret < 0){
        printf("Cannot write brightness.ret is %d,errno is %d.\n",ret,errno);
        return ret;
    }


    close(fd);
    LOGI("Set LCD backlight success.");
    return 0;
}

获取屏幕状态

操作背光之后,通过系统API无法获取真实的背光值,从而无法判断背光的开关.可以通过JNI来获取.

static int get_backlight(void)
{
     char *path = "/sys/class/backlight/backlight/brightness";
     char brightness[3] = {0};
     int ret = 0;

     int fd = open(path,O_RDONLY);
     if(fd < 0){
          LOGE("Cannot open brightness.");
          return fd;
     }

     ret = read(fd,&brightness,3);
     if(ret <= 0){
        LOGE("read brightness fail.");
        return -133;
     }

     close(fd);
     return (ret == 3) ? 179 : 0;

}

这里简单处理了返回值;因为只需要获取状态即可.

按键模拟

关闭熄屏之后按键或者其他模拟按键是无法唤醒设备的,所以需要监听到按键.

diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index c0a9b31f..02488199 100755
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -6111,12 +6111,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                 } catch (RemoteException e) {
 
                 }
-                result &= ~ACTION_PASS_TO_USER;
+                result |= ACTION_PASS_TO_USER;
                 isWakeKey = false; // wake-up will be handled separately
                 if (down) {
                     interceptPowerKeyDown(event, interactive);
+                   mContext.sendBroadcast(new Intent("com.qxzn.keycode.power.down"));
                 } else {
                     interceptPowerKeyUp(event, interactive, canceled);
+                   mContext.sendBroadcast(new Intent("com.qxzn.keycode.power.up"));
                 }
                 break;
             }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349