dumpsys window | grep display | grep 'imeInputTarget' | cut -d'#' -f2 | awk '{print $1}' | sed 's/#/ /' 0 2
时间: 2023-10-15 18:07:11 浏览: 125
这是一个用于获取当前输入法窗口 ID 的命令,具体来说:
- dumpsys window:输出窗口系统的信息
- grep display:筛选包含 display 的行
- grep 'imeInputTarget':筛选包含 imeInputTarget 的行,这行信息包含了当前输入法窗口的 ID
- cut -d'#' -f2:按 # 分割,取第二个字段,即输入法窗口的 ID
- awk '{print $1}':输出第一个字段,即输入法窗口的 ID
- sed 's/#/ /':将 # 替换为空格,这样输出的就是纯数字的输入法窗口 ID。
如果你想了解更多关于 Android 系统的命令,请参考 Android 开发者文档中的相关章节。
相关问题
dumpsys window | grep display | grep 'imeInputTarget' | cut -d'#' -f2 | awk '{print $1}' && dumpsys window | grep display | grep 'imeInputTarget' | cut -d'#' -f2 | awk '{print $NF}' | cut -d'}' -f1 0 2 com.ktcp.video/com.ktcp.video.activity.ScreenSaverActivity com.tencent.start.tv/com.tencent.start.ui.SplashActivity
这个命令输出了当前输入法窗口所在应用的包名和窗口信息。其中,`com.ktcp.video/com.ktcp.video.activity.ScreenSaverActivity` 表示第一个应用程序的栈顶 Activity 是 `ScreenSaverActivity`,而 `com.tencent.start.tv/com.tencent.start.ui.SplashActivity` 则表示第二个应用程序的栈顶 Activity 是 `SplashActivity`。
如果你只想要包名和栈顶 Activity 的信息,可以使用以下命令:
```
adb shell dumpsys window windows | grep -E 'mCurrentFocus|mFocusedApp' && adb shell dumpsys activity top | grep 'ACTIVITY' | head -n 2 | awk -F ' ' '{print $4}'
```
这个命令会先输出当前焦点窗口所在应用的信息,然后输出前两个 Activity 的包名和类名,即第一个应用程序的栈顶 Activity 和第二个应用程序的栈顶 Activity。你可以根据需要对输出结果进行处理,提取出包名和栈顶 Activity 的信息。
#!/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
```
这样代码更加简洁,可读性也更好了。
阅读全文