You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Android的Termux中编写Bash脚本监听屏幕点击及位置并响应

嘿,我刚好在Termux里折腾过类似的需求,分享下我是怎么实现的!核心就是利用Termux提供的触摸事件工具,配合Bash的条件判断来实现“点击区域绑定动作”的效果,就像文本版的网页链接一样。

前置准备

首先得确保你装了Termux API工具包和w3m,因为我们要用到触摸监听命令和文本浏览器:

pkg update && pkg install termux-api w3m

安装后第一次运行相关命令时,会弹出权限请求,记得给Termux授予触摸权限哦。

核心实现步骤

1. 监听屏幕点击事件与坐标

Termux自带的termux-touch-event命令能实时输出屏幕触摸的动作类型(按下、松开等)和坐标。我们可以用一个循环持续监听:

while true; do
  # 只捕获按下动作的事件
  event=$(termux-touch-event | grep "DOWN")
  if [ -n "$event" ]; then
    # 从输出中解析x、y坐标(输出格式类似:DOWN 150 250)
    x=$(echo "$event" | awk '{print $2}')
    y=$(echo "$event" | awk '{print $3}')
    echo "检测到点击:x=$x, y=$y"
    # 后续在这里加区域判断逻辑
  fi
done

这个循环会一直运行,每次检测到屏幕按下动作,就提取出对应的坐标值。

2. 定义“可点击区域”并绑定跳转动作

接下来我们要给屏幕划分虚拟的“链接区域”,比如把顶部区域分成左右两块,分别对应打开不同网页。可以先获取终端的实际尺寸,再动态定义区域:

# 获取当前终端的宽高
screen_width=$(tput cols)
screen_height=$(tput lines)

# 定义左右两个点击区域的边界
left_area_end=$((screen_width / 2))
right_area_start=$((left_area_end + 1))

# 绑定区域对应的动作(用w3m打开网页)
left_action="w3m https://github.com"
right_action="w3m https://stackoverflow.com"

然后在之前的循环里添加判断逻辑,根据点击坐标匹配区域,执行对应动作:

if [ -n "$event" ]; then
  x=$(echo "$event" | awk '{print $2}')
  y=$(echo "$event" | awk '{print $3}')
  
  # 只处理顶部5行的点击(避免误触其他区域)
  if [ $y -le 5 ]; then
    if [ $x -le $left_area_end ]; then
      echo "正在打开GitHub..."
      $left_action
    elif [ $x -ge $right_area_start ]; then
      echo "正在打开Stack Overflow..."
      $right_action
    fi
  fi
fi

3. 添加可视化提示(模拟网页链接)

为了让用户清楚知道哪里可以点击,我们可以用tput定位光标,在终端顶部绘制类似链接的提示文本:

# 清屏并绘制初始提示界面
clear
tput cup 0 0
echo "[点击左侧] 打开 GitHub"
tput cup 0 $right_area_start
echo "[点击右侧] 打开 Stack Overflow"
tput cup 5 0
echo "提示:点击顶部区域跳转,按Ctrl+C退出脚本"

把这段代码放在循环前面,用户一运行脚本就能看到清晰的操作指引。

完整示例脚本

把上面的部分整合起来,就是一个可直接运行的完整脚本:

#!/data/data/com.termux/files/usr/bin/bash

# 前置检查:确保依赖工具已安装
if ! command -v termux-touch-event &> /dev/null; then
  echo "请先安装termux-api:pkg install termux-api"
  exit 1
fi
if ! command -v w3m &> /dev/null; then
  echo "请先安装w3m:pkg install w3m"
  exit 1
fi

# 获取终端尺寸
screen_width=$(tput cols)
screen_height=$(tput lines)

# 定义点击区域和对应动作
left_area_end=$((screen_width / 2))
right_area_start=$((left_area_end + 1))
left_action="w3m https://github.com"
right_action="w3m https://stackoverflow.com"

# 绘制初始操作界面
clear
tput cup 0 0
echo "[点击左侧] 打开 GitHub"
tput cup 0 $right_area_start
echo "[点击右侧] 打开 Stack Overflow"
tput cup 5 0
echo "提示:点击顶部区域跳转,按Ctrl+C退出脚本"

# 持续监听触摸事件
echo "开始监听屏幕点击..."
while true; do
  event=$(termux-touch-event | grep "DOWN")
  if [ -n "$event" ]; then
    x=$(echo "$event" | awk '{print $2}')
    y=$(echo "$event" | awk '{print $3}')
    
    # 只响应顶部5行的点击
    if [ $y -le 5 ]; then
      if [ $x -le $left_area_end ]; then
        clear
        echo "正在打开GitHub..."
        $left_action
        # 返回主界面
        clear
        tput cup 0 0
        echo "[点击左侧] 打开 GitHub"
        tput cup 0 $right_area_start
        echo "[点击右侧] 打开 Stack Overflow"
        tput cup 5 0
        echo "提示:点击顶部区域跳转,按Ctrl+C退出脚本"
      elif [ $x -ge $right_area_start ]; then
        clear
        echo "正在打开Stack Overflow..."
        $right_action
        # 返回主界面
        clear
        tput cup 0 0
        echo "[点击左侧] 打开 GitHub"
        tput cup 0 $right_area_start
        echo "[点击右侧] 打开 Stack Overflow"
        tput cup 5 0
        echo "提示:点击顶部区域跳转,按Ctrl+C退出脚本"
      fi
    fi
  fi
done
扩展建议
  • 可以增加更多点击区域,比如底部区域绑定“退出脚本”的动作
  • tput绘制带边框的文本按钮,让界面更直观
  • 动态适配不同终端尺寸,避免固定坐标导致的适配问题
  • 支持长按、滑动等复杂触摸动作(需要解析termux-touch-event的更多输出字段)

内容的提问来源于stack exchange,提问作者ANDuser

火山引擎 最新活动