我怎样才能打开屏幕?
我尝试了类似于这样的东西
adb -d shell am broadcast -a android.intent.action.SCREEN_ON
它应该能够运行,我发送了广播意图并且系统已经接收到了,但屏幕没有亮起来。
我不明白问题出在哪里,是否可能通过代码来打开设备的屏幕?我的意思是使用软件。因为似乎只有硬件按键才可以打开屏幕......至少我有这种感觉,我错了吗?
我怎样才能打开屏幕?
我尝试了类似于这样的东西
adb -d shell am broadcast -a android.intent.action.SCREEN_ON
它应该能够运行,我发送了广播意图并且系统已经接收到了,但屏幕没有亮起来。
我不明白问题出在哪里,是否可能通过代码来打开设备的屏幕?我的意思是使用软件。因为似乎只有硬件按键才可以打开屏幕......至少我有这种感觉,我错了吗?
adb shell input keyevent KEYCODE_POWER
在显示器关闭时工作以打开屏幕 在显示器开启/唤醒时工作以关闭屏幕
对于 Android 5.0 及以上版本:
adb shell input keyevent KEYCODE_WAKEUP
或者adb shell input keyevent 224
KEYCODE_WAKEUP
按键代码常量:唤醒键。唤醒设备。行为类似于
KEYCODE_POWER
,但如果设备已经唤醒,则没有影响。
https://developer.android.com/reference/android/view/KeyEvent#KEYCODE_WAKEUP
注意:KEYCODE_POWER
已在API级别1中添加,而KEYCODE_WAKEUP
已在API级别20中添加!
如果您想打开/关闭它,可以这样做:
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.xadb 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
我可能对此有所错误,但是...
你不应该把广播视为一种“发送以完成任务”的方式,而应该将其视为在完成任务后“发送”的东西。
我认为当屏幕打开时,系统会发送“android.intent.action.SCREEN_ON”,但是发送“android.intent.action.SCREEN_ON”并不一定会使屏幕打开。
希望这样说得清楚了。
答案可以在以下链接中找到...
切换屏幕开/关的命令是:
adb shell input keyevent 26
这在安卓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
adb shell am start -n packagename/activityname
通过adb启动应用程序,则如果屏幕当前关闭(在Android 5.0上测试了Unity3d应用程序),则屏幕将自动打开。 - Lena Schimmel