在设备上打开屏幕

18

我怎样才能打开屏幕?

我尝试了类似于这样的东西

adb -d  shell am broadcast -a android.intent.action.SCREEN_ON

它应该能够运行,我发送了广播意图并且系统已经接收到了,但屏幕没有亮起来。

我不明白问题出在哪里,是否可能通过代码来打开设备的屏幕?我的意思是使用软件。因为似乎只有硬件按键才可以打开屏幕......至少我有这种感觉,我错了吗?


1
如果我没记错的话,这看起来像是一个重复的问题:https://dev59.com/nHE85IYBdhLWcg3wNgrk - Sephy
仅供参考:如果您使用adb shell am start -n packagename/activityname通过adb启动应用程序,则如果屏幕当前关闭(在Android 5.0上测试了Unity3d应用程序),则屏幕将自动打开。 - Lena Schimmel
请查看此答案:https://dev59.com/9FgR5IYBdhLWcg3wbs2X#49650552 - 0xAliHn
6个回答

33
adb shell input keyevent KEYCODE_POWER

在显示器关闭时工作以打开屏幕 在显示器开启/唤醒时工作以关闭屏幕


嗨,使用开/关功能,在一个设备上(Android KitKat)可以正常工作,但在另一个设备上(Wear Marshmallow)无法正常工作。 - ransh
1
对我来说,这适用于Marshmallow(6.0)和Jellybean(4.2.2)。 - Jim C
适用于Android 9。 - Mahmudul Hasan Shohag

24

14

如果您想打开/关闭它,可以这样做:

adb shell
@shell: input keyevent 26
@shell: (enter or via hidden command empty line)
@shell: exit

这对我在某些安卓版本上有效 ;)
(注意:这将打开和关闭屏幕,取决于实际的屏幕状态)

要检测屏幕当前的状态,您可以使用以下方法:
Android < 5.x.x
adb shell dumpsys input_method
在输出中搜索mScreenOn=true/false

Android >= 5.x.x
adb shell dumpsys display
在输出中搜索mScreenState=ON/OFF

在我的脚本中,我使用这个正则表达式 \s{0,}mScreen(State|On)=(?<STATE>(true|false|on|off))\s{0,}(Compiled|IgnoreCase|ExplicitCapture)用于检测当前状态的两个输出。

编辑(2018年3月16日):

还有另一种检测屏幕状态的方法,它适用于Android 3.0以上。我们可以使用 dumpsys window policy 命令得到所需信息。- 在输出中搜索mScreenOn(Fully)?=(?<STATE>(true|false))。 还有其他有用的信息,例如:

  • mUnrestrictedScreen(值类似于:(0,0) 768x1280
  • mRestrictedScreen(值类似于:(0,0) 768x1184

谢谢,
k1ll3r8e


6

我可能对此有所错误,但是...

你不应该把广播视为一种“发送以完成任务”的方式,而应该将其视为在完成任务后“发送”的东西。

我认为当屏幕打开时,系统会发送“android.intent.action.SCREEN_ON”,但是发送“android.intent.action.SCREEN_ON”并不一定会使屏幕打开。

希望这样说得清楚了。

答案可以在以下链接中找到...


2

切换屏幕开/关的命令是:

adb shell input keyevent 26

这个简洁的命令更受欢迎,因为它允许您在脚本中使用它。
干杯!

1
切换不等于“打开”,打开必须考虑显示器是否已经打开,否则可能会关闭。 - David

1

这在安卓12中可以正常工作。

#!/bin/bash
screenState=$(adb shell dumpsys window policy | grep screenState=SCREEN_STATE_ | cut -c 32-)

if [ "$screenState" == "OFF" ]; then 
    adb shell input keyevent KEYCODE_POWER

fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接