Nagrywaj filmy i dźwięki

Aplikacja może nagrywać film lub dźwięk odtwarzany z innej aplikacji. Takie aplikacje muszą poprawnie obsługiwać token MediaProjection. Na tej stronie znajdziesz instrukcje. Pokazuje też, jak administrator urządzenia może wyłączyć możliwość nagrywania zrzutów ekranu oraz jak aplikacja audio może uniemożliwić innym aplikacjom nagrywanie odtwarzanych przez nią treści.

Jak obsługiwać token MediaProjection

Interfejs API MediaProjection pozwala aplikacjom na uzyskanie tokena MediaProjection, który zapewnia jednorazowy dostęp do treści na ekranie 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 nadal rejestrować ciszę lub czarny strumień wideo.

Aby obsłużyć utratę tokena, zarejestruj wywołanie zwrotne w obiekcie MediaProjection, używając metody registerCallback, i zatrzymaj nagrywanie po wywołaniu metody 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 (Androida dla firm) administrator może wyłączyć zbieranie danych asystenta na profilu służbowym, używając metody setScreenCaptureDisabled.

W laboratorium kodu Zarządzanie urządzeniami z Androidem bez użycia aplikacji znajdziesz informacje o tym, 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. Ta funkcja jest odpowiednikiem przechwytywania ekranu, ale w przypadku dźwięku. Główne zastosowanie to aplikacje do strumieniowego przesyłania danych, które chcą rejestrować dźwięk odtwarzany przez gry.

Pamiętaj, że interfejs AudioPlaybackCapture API nie wpływa na opóźnienie aplikacji, której dźwięk jest rejestrowany.

Tworzenie aplikacji do przechwytywania

Ze względów bezpieczeństwa i prywatności nagrywanie odtwarzania wiąże się z pewnymi ograniczeniami. Aby można było rejestrować dźwięk, aplikacja musi spełniać te wymagania:

Aby rejestrować dźwięk z innej aplikacji, musi ona utworzyć AudioRecord obiekt i dodaj AudioPlaybackCaptureConfiguration . Wykonaj te czynności:

  1. Zadzwoń pod numer AudioPlaybackCaptureConfiguration.Builder.build() aby stworzyć AudioPlaybackCaptureConfiguration
  2. Przekaż konfigurację do AudioRecord, wywołując setAudioPlaybackCaptureConfig

Sterowanie rejestrowaniem dźwięku

Aplikacja może określać, jakie typy treści może nagrywać, a także jakie inne aplikacje mogą nagrywać jej odtwarzanie.

Ograniczenie nagrywania według treści audio

Aplikacja może ograniczyć przechwytywanie dźwięku za pomocą metody:

Pamiętaj, że nie możesz używać metod addMatchingUsage() i excludeUsage() jednocześnie. Musisz wybrać jeden lub drugi. Podobnie nie możesz korzystać z usług addMatchingUid() i excludeUid() z powrotem.

Ograniczenie możliwości przechwytywania przez inne aplikacje

Możesz skonfigurować aplikację, aby uniemożliwić innym aplikacjom rejestrowanie dźwięku. Dźwięk z aplikacji można przechwytywać tylko wtedy, gdy aplikacja spełnia te wymagania:

Wykorzystanie

Odtwarzacz, który generuje dźwięk, musi ustawić jego użycie na USAGE_MEDIA, USAGE_GAME lub USAGE_UNKNOWN.

Zasady przechwytywania

Zasady dotyczące nagrywania przez odtwarzacz muszą być ustawione na AudioAttributes.ALLOW_CAPTURE_BY_ALL, co pozwala innym aplikacjom na nagrywanie odtwarzania. Można to zrobić na kilka sposobów:

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 umożliwiające rejestrowanie dotyczą tylko aplikacji. Komponenty systemu Android domyślnie mogą rejestrować odtwarzanie. Wiele z tych komponentów jest dostosowywanych przez dostawców Androida i obsługuje funkcje takie jak ułatwienia dostępu i napisy. Dlatego zalecamy, aby aplikacje zezwalały systemowi na rejestrowanie 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 w momencie wywołania metody odtwarzany jest MediaPlayer lub AudioTrack, dźwięk nie zostanie zmieniony. Musisz zamknąć i ponownie otworzyć odtwarzacz lub śledzić, aby zmiana zasad zaczęła obowiązywać.

Zasada = manifest + AudioManager + AudioAttributes

Ponieważ zasadę przechwytywania można określić w kilku miejscach, ważne jest, aby wiedzieć, jak określana jest obowiązująca zasada. 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:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
prawda dowolna aplikacja tylko system brak przechwytywania
fałsz tylko system tylko system brak przechwytywania