echo "$display_id $activity"已经结合了id在第一个参数
时间: 2023-12-06 15:03:00 浏览: 112
非常抱歉,我理解错了您的代码,确实是将ID和activity都打印在了同一行。那么优化的代码应该是这样的:
```
#!/system/bin/sh
# 获取当前活跃窗口所在的显示器 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 display_id=$(echo "$displays" | grep "$focus" | cut -d'#' -f2 | awk '{print $1}')
echo "$display_id"
}
# 判断窗口所在的显示器
display_id=$(get_display_id)
if [ "$display_id" = "0" ]; then
echo "该窗口在 display#0 上"
elif [ "$display_id" = "2" ]; then
echo "该窗口在 display#2 上"
else
echo "该窗口不在 display#0 或 display#2 上"
fi
```
这样就可以只返回ID了,不需要返回activity。并且使用if语句来判断,代码也更加简洁了。
相关问题
local id1=$(echo $DISPLAY_ID | awk '{print $1}') local id2=$(echo $DISPLAY_ID | awk '{print $2}') echo $id1 echo $id2 if [ "$id1" > "$id2" ]; then echo $id1 else echo $id2 fi
这段代码的作用是获取当前设备的显示屏ID,并将其赋值给变量DISPLAY_ID。然后,使用echo和awk命令将DISPLAY_ID中的第一个和第二个ID分别赋值给变量id1和id2。接着,使用if语句判断id1是否大于id2,如果是,则输出id1,否则输出id2。
下面是这段代码的优化版本:
```
ids=($(dumpsys window | awk '/displayId=/ {print $1}' | sed 's/displayId=//g'))
max_id=${ids[0]}
for id in "${ids[@]}"; do
if [ "$id" -gt "$max_id" ]; then
max_id=$id
fi
done
if [ "$max_id" == "2" ]; then
echo "选择大的"
else
echo "选择小的"
fi
```
这个优化版本中,首先使用dumpsys、awk和sed命令获取当前设备的所有显示屏ID,并将其存储到数组ids中。然后,使用for循环遍历ids数组,并使用if语句判断当前ID是否比之前的max_id大,如果是,则更新max_id的值。最后,使用if语句判断max_id是否为2,如果是,则输出“选择大的”,否则输出“选择小的”。
#! /system/bin/sh # 监听按键的设备文件和按键值 DEVICE_FILE="/dev/input/event0" KEY_VALUE="00a5" KEY_VALUE2="00a3" DISPLAY_ID=$(dumpsys window | awk '/displayId=/ {print $1}' | sed 's/displayId=//g') local id1=$(echo $DISPLAY_ID | awk '{print $1}') local id2=$(echo $DISPLAY_ID | awk '{print $2}') # 按键副屏打开 function key_state() { if [ "$id1" -gt "$id2" ]; then echo $id1 am start -n com.tencent.start.tv/com.tencent.start.ui.SplashActivity --display "$id1" else echo $id2 am start -n com.tencent.start.tv/com.tencent.start.ui.SplashActivity --display "$id2" fi } # 监听按键事件 function listen_key_events() { # 判断设备文件是否存在 if [ ! -e "$DEVICE_FILE" ]; then echo "Error: Device file '$DEVICE_FILE' does not exist." exit 1 fi # 监听按键事件 getevent -q "$DEVICE_FILE" | while read line; do local keycode=$(echo "$line" | awk '{print $2}') local value=$(echo "$line" | awk '{print $3}') local id_activity=$(dumpsys window | grep display | grep 'imeInputTarget' | awk '{print $4,$7}' | cut -d'}' -f1) local focus=$(dumpsys window | grep "mCurrentFocus" | tail -n 1 | awk '{print $NF}' | cut -d'}' -f1) local activity=$(echo "$id_activity" | grep "$focus"| awk '{print $NF}') if [ "$keycode" = "$KEY_VALUE" ]; then if [ "$value" = "00000001" ]; then key_state fi elif [ "$keycode" = "$KEY_VALUE2" ]; then if [ "$value" = "00000001" ]; then if [ "$activity" = "$(echo $id_activity | awk '{print $2}')" ] then echo "$(echo $id_activity | awk '{print $4}')" am start -n "$(echo $id_activity | awk '{print $4}')" --display "$(echo $id_activity | awk '{print $3}')" else echo "$(echo $id_activity | awk '{print $2}')" am start -n "$(echo $id_activity | awk '{print $2}')" --display "$(echo $id_activity | awk '{print $1}')" fi fi fi done } # 启动按键监听 listen_key_events
这是一个 shell 脚本,用于监听按键事件,当检测到特定按键按下时,会打开指定应用。其中,变量 DEVICE_FILE 指定了监听的设备文件,KEY_VALUE 和 KEY_VALUE2 分别表示要监听的两个按键的值。函数 key_state 用于打开指定应用,函数 listen_key_events 中使用 getevent 命令监听设备文件中的按键事件,并根据按键值和状态判断是否打开指定应用。脚本中还使用了 dumpsys、am 等命令来获取当前窗口信息和启动应用。
阅读全文