Przygotowując materiały (grafiki) do artykułu o menedżerze haseł Bitwarden, wrzuciłem do aplikacji, w której trzymam m.in. pomysły na kolejne artykuły (Trello) cegiełkę dotyczącą zrzutów ekranu, czyli czegoś, z czego często korzystam, i często o to dostaję pytania. Pisząc precyzyjniej, chodzi o zrzuty z ekranu telefonu. Zwłaszcza z aplikacji, które takie operacje blokują. A, że wdrożenie takiej blokady jest wręcz banalne, to coraz więcej aplikacji z tego korzysta, nawet jeśli nie ma takiej potrzeby…
Spis treści w artykule
Nagrywanie ekranu w Androidzie nawet z aplikacji, które to blokują
Przez ostatnie kilka lat narzędzi, z których korzystam do tego celu, było co najmniej kilka. Zmieniały się wraz z telefonami i samym Androidem. Zwłaszcza że nie na każdym „robiłem roota”, co zazwyczaj rozwiązywało też problem ewentualnych blokad.
I choć na biurku cały czas leży zrootowana Moto G, by w razie potrzeby ciężar robienia zrzutów ekranu wziąć na siebie, to sięgam po nią – przynajmniej do tego celu – coraz rzadziej. I to pomimo tego, że mój główny telefon (Huawei P20 Lite) nie ma roota, a więc wszelkiej maści ograniczenia w wykonywaniu zrzutów ekranu go dotyczą.
Z pomocą przychodzi program Scrcpy, dzięki czemu obraz z telefonu – korzystająć z ADB i trybu debugowania – mogę wyświetlić na komputerze (aplikacja Twój Telefon, którą Microsoft rozwija w systemie Windows 10 teoretycznie też to potrafi, ale nie wiem, czy i jak radzi sobie z blokadami, bo dla mojego telefonu ta opcja jest niedostępna). A jak mam na komputerze, to zrzuty ekranu mogę robić dowolnie, w tym tak jak w większości przypadków mi najwygodniej. Czyli z wykorzystaniem klawiszy ALT i Print Screen, oraz aplikacji One Drive, dzięki czemu każdy zrzut ekranu automatycznie ląduje jako plik graficzny w odpowiednim katalogu. No i jest jeszcze bonus – za pomocą okna wygenerowanego przez Scrcpy można też sterować telefonem.
Teoretycznie samo ADB też pozwala wykonać zrzut ekranu na telefonie:
adb shell screencap /sdcard/screencap.png
Ale metoda ta – podobnie jak zwykły zrzut ekranu w telefonie – nie działa w przypadku aplikacji, które mają zrzuty ekranu zablokowane.
A z obrazem wyświetlonym na komputerze za pomocą programu Scrcpy (dostępny jest nie tylko na Windowsa, ale i na Linuksa czy MacOS) takiego problemu nie ma:
Powyżej kilka przykładowych zrzutów, z takich aplikacji jak Authy, Signal (z włączoną blokadą), opisywany wczoraj Bitwarden, mBank i Nest Bank, oraz eDO App i mObywatel. Wszystkie z blokadą uniemożliwiającą wykonanie zrzutu z poziomu (niezrootowanego) telefonu.
Obsługa aplikacji Scrcpy
A najlepsze to, że obsługa Scrcpy jest więcej niż prosta. Tak naprawdę potencjalnie największa trudność to uruchomienie trybu debugowania w opcjach dla programisty, oraz wiersza poleceń na komputerze, do którego podłączony jest telefon.
Podstawowe polecenie, z którego najczęściej korzystam to:
scrcpy --window-borderless --stay-awake
Można – tak jak zrobiłem to na testowych zrzutach powyżej – dodać nazwę okna. Wygląda to moim zdaniem słabiej niż wersja „bezramkowa”, ale jest i taka możliwość:
scrcpy --window-title 'Webinsider.pl' --stay-awake
Możemy też bezpośrednio z poziomu Scrcpy nagrać film (MP4, MKV):
scrcpy --record file.mp4 --stay-awake
A nawet przy tej okazji wyłączyć ekran w telefonie, by ewentualnie podnieść trochę wydajność:
scrcpy --no-display --record file.mp4
Możemy wybrać liczbę klatek na sekundę, z jaką ma się wyświetlać na komputerze obraz z telefonu (oficjalnie działa na Androidach w wersji 10 lub nowszych, ale na starszych też ponoć może zadziałać:
--max-fps 15
Domyślnie obraz z telefonu jest pobierany z „przepływnością” (bitrate) 8 Mbps, ale można i to zmienić:
--bit-rate 2M
A nawet włączyć wyświetlanie na pełnym ekranie:
--fullscreen
A do tego obraz można obrócić, jeśli zajdzie taka potrzeba:
--rotation X
Gdzie zamiast X dajemy cyfrę od 1 do 3:
- 1 – 90 stopni w lewo
- 2 – 180 stopni
- 3 – 90 stopni w prawo
Można też użyć zera (0), by obrócić obraz o 360 stopni… ;-)
Gdy coś nie działa
Może się zdarzyć, że podczas próby uruchomienia aplikacji zamiast okna z podglądem ekranu telefonu pojawi się błąd i aplikacja zakończy działanie. Przyczyn może być sporo, ale z doświadczenia wiem, że dość popularny jest taki oto błąd:
INFO: Renderer: direct3d
INFO: Initial texture: 1080x2336
WARN: Device disconnected
[server] ERROR: Exception on thread Thread[main,5,main]
android.media.MediaCodec$CodecException: Error 0xfffffff4
at android.media.MediaCodec.native_configure(Native Method)
at android.media.MediaCodec.configure(MediaCodec.java:2024)
at android.media.MediaCodec.configure(MediaCodec.java:1952)
at com.genymobile.scrcpy.ScreenEncoder.configure(ScreenEncoder.java:237)
at com.genymobile.scrcpy.ScreenEncoder.internalStreamScreen(ScreenEncoder.java:90)
at com.genymobile.scrcpy.ScreenEncoder.streamScreen(ScreenEncoder.java:61)
at com.genymobile.scrcpy.Server.scrcpy(Server.java:80)
at com.genymobile.scrcpy.Server.main(Server.java:255)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:380)
WARN: Killing the server...
Wtedy do polecenia wystarczy dodać parametr zmieniający rozdzielczość dla podglądu, np.:
-m 1080
Cała komenda może wtedy wyglądać np. tak:
scrcpy --window-title 'Webinsider.pl' --stay-awake -m 1080
Niedawno w ten sposób ratowałem podgląd na komputerze znajomego, dziś musiałem sam skorzystać z tego „triku” (padła mi karta graficzna, i najwidoczniej zintegrowana z procesorem nie potrafiła sobie poradzić w standardowej konfiguracji, a może po prostu monitor za mały, bo tylko 1080p ;-)).
- Wakacje składkowe ZUS a zawieszenie działalności gospodarczej, czyli uważaj, bo być może nie będziesz mógł skorzystać (w 2024) - 1970-01-01
- Przykładowy kalkulator wyceny usługi druku 3D, czyli nie tylko materiał się liczy - 1970-01-01
- Home Assistant 2024.10, czyli nowa karta „nagłówek” i niedziałający TTS w ramach usługi Google Cloud - 1970-01-01