local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) 我是获取出来的想通过adb 关闭
时间: 2023-10-14 08:04:28 浏览: 95
获取到当前活动窗口的包名和Activity名后,可以通过ADB命令关闭该Activity。具体的命令为:
```
adb shell am force-stop <package_name>
```
其中,`<package_name>`指的是要关闭的应用程序的包名。你可以使用以下命令从获取到的`focus`变量中提取出包名:
```
local package=$(echo $focus | cut -d'/' -f1)
```
然后,将`package`变量插入到ADB命令中:
```
adb shell am force-stop $package
```
这样就可以关闭当前活动窗口所属的应用程序了。
相关问题
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
```
这样代码更加简洁,可读性也更好了。
阅读全文