local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local displays=$(dumpsys window | grep display | grep 'imeInputTarget') local display_id=$(echo "$displays" | cut -d'#' -f2 | awk '{print $1}') local activity=$(echo "$displays" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1) echo $display_id $activity
时间: 2024-04-27 22:25:09 浏览: 164
这是一个bash脚本,它的作用是获取当前窗口焦点所在的显示器ID和Activity名称。具体来说,它的执行步骤如下:
1. 使用`dumpsys window`命令获取当前窗口焦点的信息,并使用`grep "mCurrentFocus"`命令获取与该信息有关的行。
2. 使用`tail -n 1`命令获取最后一行,即当前窗口焦点的信息。
3. 使用`awk '{print $NF}'`命令获取该信息的最后一个字段,即Activity名称和显示器ID。
4. 使用`cut -d'}' -f1`命令删除Activity名称中的'}'字符,从而获取显示器ID。
5. 使用`grep display | grep 'imeInputTarget'`命令获取当前输入法目标所在的显示器信息。
6. 使用`cut -d'#' -f2`命令获取显示器ID。
7. 使用`awk '{print $NF}'`命令获取Activity名称。
8. 使用`cut -d'}' -f1`命令删除Activity名称中的'}'字符,从而获取Activity名称。
9. 最后,使用`echo`命令输出显示器ID和Activity名称。
需要注意的是,该脚本需要在具有Root权限的Android设备上运行。
相关问题
local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local displays=$(dumpsys window | grep display | grep 'imeInputTarget') echo $displays | grep $focus 可以这样吗
不可以这样做。因为在函数 `get_display_id()` 中,变量 `focus` 和变量 `displays` 的值是获取当前活跃窗口信息和所有显示器信息的中间变量,并没有保存当前活跃窗口所在的显示器 ID。
在这种情况下,使用 `echo $displays | grep $focus` 来查找当前活跃窗口所在的显示器 ID 是不准确的。因为在变量 `displays` 中可能包含多个显示器的信息,而当前活跃窗口所在的显示器 ID 只是其中的一个,如果使用 `grep` 命令来查找当前活跃窗口所在的显示器 ID,可能会得到错误的结果。
正确的方法是,在函数 `get_display_id()` 中使用 `grep` 命令和正则表达式来提取当前活跃窗口所在的显示器 ID,然后将其保存在变量中并返回。这样可以保证获取的是正确的当前活跃窗口所在的显示器 ID。
#!/system/bin/sh # 获取当前活跃窗口 get_display_id() { local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local displays=$(dumpsys window | grep display | grep 'imeInputTarget') local activity=$(echo "$displays" | grep "$focus" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1) focus是否和activity一样可以返回一个布尔类型 } get_display_id_activity() { local displays=$(dumpsys window | grep display | grep 'imeInputTarget') dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1 local display_id=$(echo "$displays" | cut -d'#' -f2 | awk '{print $1}') local activity=$(echo "$displays" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1) echo $display_id $activity } get_display_id_activity # 判断窗口所在的显示器 display_id=$(get_display_id) case esac 优化一下
可以将 `get_display_id_activity()` 函数中的冗余代码去掉,同时在 `case` 语句中添加具体的操作。代码优化后如下所示:
```shell
#!/system/bin/sh
# 获取当前活跃窗口的显示器 ID 和活动
get_display_id_activity() {
local displays=$(dumpsys window | grep display | grep 'imeInputTarget')
local display_id=$(echo "$displays" | cut -d'#' -f2 | awk '{print $1}')
local activity=$(echo "$displays" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1)
echo "$display_id $activity"
}
# 获取当前活跃窗口所在的显示器 ID
get_display_id() {
local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1)
local displays=$(dumpsys window | grep display | grep 'imeInputTarget')
local activity=$(echo "$displays" | grep "$focus" | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1)
echo "$activity"
}
# 获取当前活跃窗口所在的显示器 ID,然后根据不同的显示器 ID 执行不同的操作
display_id=$(get_display_id)
case "$display_id" in
"display_id_1")
# 执行显示器1的操作
;;
"display_id_2")
# 执行显示器2的操作
;;
*)
# 默认操作
;;
esac
```
这样代码更加简洁,可读性也更好了。
阅读全文
相关推荐








