搭配視聽教室的單槍投影機或是電腦教室的廣播系統以及一條 usb 傳輸線, Android 手機不需要安裝任何 app, 它就是一部實物投影機。 請生物及地科老師呼籲學校把電腦改安裝 linux 作業系統。 或至少用 extlinux 開機管理員 讓阿貴版 finnix 變成一開機選項之一: 只佔 300MB、 不需要重新切割硬碟、 可與 windows 共存於同一分割。 其實這個功能也可以用於手機螢幕上任何靜態內容的公開展示。 (例如爆料 line 訊息的記者會)
[2018/3/24 改推薦: scrcpy 透過 adb 把手機投影到電腦上, 連影片也能看!]
首先, 你的電腦上需要一個可以
「隨著圖檔內容動態改變而不斷更新畫面」
的看圖工具, 例如 geeqie 或 feh。
其次請設定好
連線傳檔必備工具 adb。
再來, 請在手機上建立一個工作目錄:
adb shell mkdir /sdcard/tmp
等一下我們的暫存檔要放在這裡。
先下 adb shell screencap -h
查看 screencap 指令的選項。
help 訊息說它會根據命令列上的副檔名將手機畫面存成
.png 檔 (原封不動照拍; 檔案大、速度慢) 或 .jpg 檔
(幾乎無感的細微失真; 檔案小、速度快)。
注意: 有些手機只能產生 .png 檔?
隨便打開一個 app, 抓一張畫面快照來測試看看:
adb shell screencap -j /sdcard/tmp/android-screen.jpg adb pull /sdcard/tmp/android-screen.jpg
再下: geeqie android-screen.jpg
或 feh -R 1 android-screen.jpg
查看圖片。
有些機器可能只支援 png 格式,
指令要改成: adb shell screencap -p /sdcard/tmp/android-screen.png
現在可以把手機開到相機模式, 對著一片樹頁、 一塊石頭、 蝴蝶標本、 你的鼻孔、 ... 任何特寫的對象, 搭配單槍投影機, 你的手機已經變身成實物投影機了!
在 android 4.x 以前, 可以不要暫存檔, 一個指令直接傳回電腦, 但需要串 sed 指令把手機傳出來的 dos 換列字元刪掉。 詳見 這篇中文 或 這篇英文。 但我換了手機、 刷了 cm 12 (相當於 android 5) 之後, 透過 adb shell 傳來的 png 檔 (不論有沒有用 sed 整修) 一直都是爛掉的。 所以建議還是如上一節先在手機存檔、 再用 adb pull 傳回電腦, 這樣不論新舊版本 android 都適用。
不斷按 「上箭頭、 Enter」 重複下指令有點煩。
開另一個命令列分頁, 用無窮迴圈重複地更新螢幕快照:
while true ; do adb shell screencap -j /sdcard/tmp/android-screen.jpg ;
adb pull /sdcard/tmp/android-screen.jpg ; date +%T ; read ; done
(如果你的手機抓快照只支援 png 格式, 就要把 -j 改成 -p,
把所有 .jpg 附檔名改成 .png 。)
現在每按一個 enter, 就會抓一次手機的螢幕快照,
然後命令列上會印出更新完成時間;
而看圖軟體的畫面也會自動更新一次。
這樣當然無法看連續動作;
但是接上單槍投影機、 廣播老師的手機畫面,
或作為實物投影機, 已經很足夠。
你也可以把上面的 「read」 刪掉, 它就會連續更新。 不過如果採用 .png 格式, 又是較舊的手機, 會花好幾秒才更新一次, 效果並沒有比較好。
如果嫌 usb 線很麻煩的話, 也可以 用 wifi 連線。 有一些資安風險就是了。
其實用 「android 實物投影機」 會看到早就有很多老師這麼做 -- 只要裝一個 IPcam 即可。 貴哥的方法, 手機端不必安裝任何 app, 特別適合那些跟我一樣 「只願意從 f-droid 安裝 app」的朋友。
現在我有點想去敗一個 手機架 來玩了...
這可以用命令打開相機喔:
回覆刪除adb shell "am start -a android.media.action.IMAGE_CAPTURE"
然後用這個對焦:
回覆刪除adb shell "input keyevent KEYCODE_FOCUS"
./adb shell "am start -a android.media.action.IMAGE_CAPTURE";
回覆刪除sleep 2;
j=0;
for (( i=1; i<=30; i=i+1 ))
do
./adb shell screencap -p | sed 's/\r$//' > screen.png;
gpicview screen.png &
sleep 0.5;
[ "$j" != "0" ] && kill $j;
j=$!;
done