当活动不再处于前台时,重复 Bash 终端命令

当活动不再处于前台时,重复 Bash 终端命令

因此上下文:

我想制作一个 bash 终端命令,启动 VLC 来流式传输视频,然后当 VLC 不再处于前台时(当流式传输中断时间过长时,VLC 会自动转到后台),它将重复该命令以启动 VLC 再次进行流式传输。

我得到了单独的工作命令代码,但我不知道如何将它们合并为一个不断重复的命令。

  1. 要启动 VLC 并开始流式传输:
am start -a android.intent.action.VIEW -d rtsp://theurl

这将启动/将 RTSP 的默认应用程序(在本例中为 VLC)带到前台并开始流式传输。

  1. 检查 VLC 是否仍在前台
dumpsys activity activities | sed -e '/mResumedActivity/!d' -e '/vlc/!d'

当 VLC 处于前台时,这将返回类似这样的内容。

 mResumedActivity: ActivityRecord{b43545d u0 org.videolan.vlc/.gui.video.VideoPlayerActivity t11827}

如果 VLC 不在前台,则终端将不会返回任何内容。


所以也许代码会做这样的事情?

每隔 1 秒检查一次 VLC 是否在前台(使用代码 2)。如果 VLC 不在前台,则使用流媒体 URL 启动 vlc(使用代码 1)。如果 vlc 在前台,则继续检查。

答案1

尝试这个循环:

while true; do
   foreground="$(dumpsys activity activities | sed -e '/mResumedActivity/!d' -e '/vlc/!d')"
   if [[ "$foreground" == "" ]]; then
       am start -a android.intent.action.VIEW -d rtsp://theurl
   fi
   sleep 1
done

它只是检查am命令是否不返回任何内容,如果返回,则启动 vlc。

答案2

我认为这是一个错误的命令,因为它故意制造 sed 错误,但它确实有效

watch -n1 'dumpsys activity activities | sed -e '/mResumedActivity/!d' -e '/vlc/!q100' || am start -a android.intent.action.VIEW -d rtsp://address;'

因此每次流中断时,它都会自动重新启动 vlc 并重新连接到流。

相关内容