Aplikacja może nagrywać filmy i dźwięki odtwarzane z innej aplikacji. Taka
aplikacje muszą obsługiwać
Token MediaProjection
. Na tej stronie dowiesz się, jak to zrobić. Pokazuje też, jak administrator urządzenia może je wyłączyć.
możliwość nagrywania zrzutów ekranu i możliwości zapobiegania
innym aplikacjom do nagrywania
odtwarzanych treści.
Jak obsługiwać token MediaProjection
Interfejs API MediaProjection
umożliwia aplikacjom pozyskiwanie tokena MediaProjection
, który daje im jednorazowy dostęp
w celu rejestrowania treści
ekranu lub dźwięku. System operacyjny Android prosi użytkownika o podanie
przed przyznaniem tokena aplikacji.
System operacyjny wyświetli aktywne tokeny MediaProjection
w interfejsie Szybkich ustawień oraz
umożliwia użytkownikom wycofanie dostępu do tokena w dowolnym momencie. W takim przypadku
wirtualne wyświetlacze lub strumienie audio powiązane z sesją przestają odbierać
strumienie multimediów. Aplikacja musi odpowiednio zareagować. W przeciwnym razie będzie kontynuowana.
aby nagrać ciszę audio lub czarny strumień wideo.
Aby poradzić sobie z utratą tokena, zarejestruj wywołanie zwrotne w MediaProjection
instancji za pomocą
registerCallback
.
i zatrzymaj nagrywanie, gdy
onStop
.
Więcej informacji znajdziesz w artykule Wyświetlanie multimediów.
Nagraj film
Zobacz Przykładowa aplikacja ScreenCapture za pomocą interfejsu Media Projection API do rejestrowania w czasie rzeczywistym i prezentować je w SurfaceView.
DevicePolicyManager
aby zapobiec nagrywaniu ekranu. W przypadku kont firmowych (Android for Work)
administrator może wyłączyć zbieranie danych Asystenta w profilu służbowym
za pomocą funkcji
setScreenCaptureDisabled
.
Ćwiczenie z programowania Zarządzanie urządzeniami z Androidem bez aplikacji pokazuje, jak zablokować możliwość wykonywania zrzutów ekranu.
Przechwytywanie odtwarzania dźwięku
Interfejs AudioPlaybackCapture API został wprowadzony w Androidzie 10. Ten interfejs API umożliwia aplikacjom kopiowanie dźwięku odtwarzanego przez inne aplikacje. Ten to typ analogowy zrzutu ekranu, ale dźwięk. Głównym przypadkiem użycia jest w przypadku aplikacji do odtwarzania strumieniowego, które chcą rejestrować dźwięk w grach.
Pamiętaj, że interfejs AudioOdtwarzanieCapture API nie wpływa na czas oczekiwania w aplikacji, w której dźwięk jest są przechwytywane.
Tworzenie aplikacji do przechwytywania
Ze względu na bezpieczeństwo i prywatność nagrywanie odtwarzania ma pewne ograniczenia. Aby można było rejestrować dźwięk, aplikacja musi spełniać te wymagania:
- Aplikacja musi mieć
RECORD_AUDIO
uprawnienia. - Aplikacja musi wyświetlić prompt wyświetlany przez
MediaProjectionManager.createScreenCaptureIntent()
, a użytkownik musi je zatwierdzić. - Aplikacje do nagrywania i odtwarzania muszą być w tym samym profilu użytkownika.
Aby rejestrować dźwięk z innej aplikacji, musi ona utworzyć
AudioRecord
obiekt
i dodaj
AudioPlaybackCaptureConfiguration
. Wykonaj te czynności:
- Zadzwoń pod numer
AudioPlaybackCaptureConfiguration.Builder.build()
aby stworzyćAudioPlaybackCaptureConfiguration
- Przekaż konfigurację do
AudioRecord
, wywołującsetAudioPlaybackCaptureConfig
Sterowanie rejestrowaniem dźwięku
Aplikacja może kontrolować, jakie typy treści może nagrywać i jakie inne rodzajów aplikacji mogą nagrywać własne odtwarzanie.
Ograniczenie nagrywania według treści audio
Aplikacja może ograniczyć przechwytywanie dźwięku za pomocą metody:
- Przekaż
AUDIO_USAGE
do AudioOdtwarzanieCaptureConfiguration.addMatchingUsage() co pozwala rejestrować konkretne zastosowania. Wywołaj tę metodę wiele razy, aby określić więcej niż jedno użycie. - Przekaż
AUDIO_USAGE
do AudioPlaybackCaptureConfiguration.wyłączUsage(), aby zakazu rejestrowania tego użycia. Wywołaj tę metodę wiele razy, aby określić więcej niż jedno użycie. - Przekazując identyfikator UID do metody AudioPlaybackCaptureConfiguration.addMatchingUid() aby przechwytywać tylko aplikacje z określonym UID. Wywołaj tę metodę wiele razy, aby określić więcej niż 1 identyfikator UID.
- Aby uniemożliwić przechwytywanie tego identyfikatora UID, przekaż identyfikator UID do metody AudioPlaybackCaptureConfiguration.wyłączUid(). Wywołaj tę metodę wiele razy, aby określić więcej niż 1 identyfikator UID.
Pamiętaj, że nie możesz używać metod addMatchingUsage()
i excludeUsage()
razem. Musisz wybrać jeden lub drugi. Podobnie nie możesz korzystać z usług addMatchingUid()
i excludeUid()
z powrotem.
Ograniczenie przechwytywania przez inne aplikacje
Możesz skonfigurować aplikację tak, by uniemożliwić innym aplikacjom przechwytywanie dźwięku. Dźwięk z aplikacji można przechwytywać tylko wtedy, gdy aplikacja spełnia te wymagania:
Wykorzystanie
Odtwarzacz generujący dźwięk musi określić sposób wykorzystania
do USAGE_MEDIA
,
USAGE_GAME
lub
USAGE_UNKNOWN
Zasady przechwytywania
Zasada przechwytywania musi być
AudioAttributes.ALLOW_CAPTURE_BY_ALL
,
co umożliwia innym aplikacjom przechwytywanie odtwarzania. Można to zrobić na kilka sposobów:
- Aby włączyć przechwytywanie na wszystkich odtwarzaczach, dopisz
android:allowAudioPlaybackCapture="true"
w aplikacjimanifest.xml
. - Możesz też włączyć przechwytywanie obrazu u wszystkich graczy, dzwoniąc
AudioManager.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
- Możesz ustawić zasady dla konkretnego gracza podczas jego tworzenia za pomocą
AudioAttributes.Builder.setAllowedCapturePolicy(AudioAttributes.ALLOW_CAPTURE_BY_ALL)
(Jeśli używasz wywołaniaAAudio
AAudioStreamBuilder_setAllowedCapturePolicy(AAUDIO_ALLOW_CAPTURE_BY_ALL)
)
Jeśli spełniasz te wymagania wstępne, można przechwytywać każdy dźwięk wygenerowany przez odtwarzacz.
Wyłączanie przechwytywania systemu
Opisane powyżej zabezpieczenia, które umożliwiają przechwytywanie danych, mają zastosowanie tylko do aplikacji. Android,
komponenty systemu mogą domyślnie przechwytywać odtwarzanie.
Wiele z tych komponentów jest dostosowywanych przez dostawców Androida i obsługuje funkcje
np. ułatwienia dostępu i napisy. Z tego powodu zalecamy, aby
i umożliwia systemowi przechwytywanie odtwarzania. W rzadkich przypadkach, gdy nie
chcesz, aby system przechwytywał odtwarzanie aplikacji, ustaw zasadę przechwytywania na
ALLOW_CAPTURE_BY_NONE
Ustawianie zasad w czasie działania
Aby zmienić zapis, możesz zadzwonić pod numer AudioManager.setAllowedCapturePolicy()
zasady podczas działania aplikacji. Jeśli odtwarzany jest MediaPlayer lub AudioTrack
nie wpływa to na dźwięk. Musisz zamknąć i ponownie otworzyć
odtwarzacz lub śledzić, aby zmiana zasad zaczęła obowiązywać.
Zasada = manifest + AudioManager + AudioAttributes
Ponieważ zasady przechwytywania można określić w kilku miejscach, ważne jest,
aby zrozumieć, jak określamy obowiązujące zasady.
Zawsze stosowana jest najbardziej restrykcyjna zasada przechwytywania. Na przykład w przypadku aplikacji, której
Plik manifestu zawiera plik setAllowedCapturePolicy="false"
, który nigdy nie zezwala na elementy inne niż system
aplikacji rejestrujących dźwięk, nawet jeśli skonfigurowano ustawienie AudioManager#setAllowedCapturePolicy
do: ALLOW_CAPTURE_BY_ALL
. Podobnie, jeśli
AudioManager#setAllowedCapturePolicy
ma wartość ALLOW_CAPTURE_BY_ALL
, a
w pliku manifestu ustawiany jest parametr setAllowedCapturePolicy="true"
, ale typ w odtwarzaczu
AudioAttributes
zostały utworzone za pomocą
AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM)
, a potem
tego odtwarzacza nie obsługują aplikacje inne niż systemowe.
W tabeli poniżej przedstawiono efekty działania atrybutu pliku manifestu oraz atrybutu obowiązująca polityka:
zezwalaj na odtwarzanie dźwięku na przechwytywanie dźwięku | ALLOW_CAPTURE_BY_ALL | ALLOW_CAPTURE_BY_SYSTEM | ALLOW_CAPTURE_BY_NONE |
---|---|---|---|
prawda | dowolna aplikacja | tylko system | brak zdjęcia |
fałsz | tylko system | tylko system | brak zdjęcia |