如果有拔插display 的id会变化不是固定的0和1,改成自动获取的,好像wm display,在Android12没有效果
时间: 2023-12-11 21:02:22 浏览: 131
android-display分析.doc
如果你是在 Android 12 上尝试使用 `wm display` 命令切换屏幕,可能会发现这个命令已经无法使用了。这是因为 Android 12 中对多屏幕的支持做了一些改变,使用 `wm display` 命令已经无法切换屏幕了。
如果你想要在 Android 12 上实现切换屏幕,可以使用 `settings` 命令来实现。具体来说,你可以使用 `settings put global display_portrait 0` 命令将主屏幕设置为默认屏幕,然后在遥控器输入 TV 键时,使用 `settings put global display_portrait 1` 命令将副屏幕设置为默认屏幕。
下面是一个示例脚本,可以实现使用 TV 键来切换主屏或副屏:
```bash
#!/vendor/bin/sh
# 获取当前正在使用的屏幕 ID
current_id=$(dumpsys display | grep "mDisplayId=" | grep -oP "(?<=mDisplayId=)[0-9]+")
# 将主屏幕设置为默认屏幕
settings put global display_portrait 0
# 启动 ConsumerIRService 服务,以便接收遥控器的输入事件
setprop ro.remotecontroller.modules consumerir
start consumer_ir_service
# 循环监听遥控器的输入事件
while true; do
# 读取遥控器的输入事件,并解析出按键码
ir_code=$(getevent -t -c 1 /dev/input/event0 | grep -oP ".*?((?<=KEYCODE_)[A-Z0-9]+).*" | awk '{print $10}')
# 如果按键码是 KEYCODE_TV,则切换主屏幕或副屏幕的使用状态
if [ "$ir_code" = "KEYCODE_TV" ]; then
if [ "$current_id" = "0" ]; then
settings put global display_portrait 1
current_id=1
else
settings put global display_portrait 0
current_id=0
fi
fi
# 降低 CPU 占用率,避免过度消耗系统资源
sleep 0.1
done
```
在这个脚本中,我们首先使用 `dumpsys display` 命令获取当前正在使用的屏幕 ID,然后使用 `settings put global display_portrait` 命令将主屏幕设置为默认屏幕。在循环中监听遥控器的输入事件,如果按键码是 `KEYCODE_TV`,则使用 `settings put global display_portrait` 命令切换主屏幕或副屏幕的使用状态。在切换状态时,我们使用 `$current_id` 变量来记录当前使用的屏幕 ID,如果当前使用的是主屏幕,则切换到副屏幕,反之亦然。
需要注意的是,这个脚本文件需要具备可执行权限,你可以使用以下命令来赋予它可执行权限:
```bash
chmod +x /vendor/bin/switch_screen
```
另外,为了让这个脚本在系统启动后自动运行,你需要将它添加到系统的开机自启动列表中。具体的实现方法可以参考我之前给你的回答中的方法。
阅读全文