Nagrywaj filmy i dźwięki

Aplikacja może nagrywać obraz lub dźwięk odtwarzany przez inną aplikację. Takie aplikacje muszą prawidłowo obsługiwać token MediaProjection. Na tej stronie dowiesz się, jak to zrobić. Pokazuje też, jak administrator urządzenia może wyłączyć możliwość nagrywania zrzutów ekranu i jak aplikacja audio może uniemożliwić innym aplikacjom nagrywanie odtwarzanych przez nią treści.

Jak postępować z tokenem MediaProjection

Interfejs API MediaProjection umożliwia aplikacjom uzyskanie tokena MediaProjection, który daje im jednorazowy dostęp do przechwytywania zawartości ekranu lub dźwięku. System operacyjny Android prosi użytkownika o zgodę, zanim przyzna token aplikacji.

System operacyjny wyświetla aktywne tokeny MediaProjection w interfejsie Szybkich ustawień i umożliwia użytkownikom wycofanie dostępu do tokena w dowolnym momencie. W takim przypadku wyświetlacze wirtualne lub strumienie audio powiązane z sesją przestają odbierać strumienie multimediów. Aplikacja musi odpowiednio zareagować, w przeciwnym razie będzie nadal nagrywać ciszę lub czarny obraz.

Aby obsłużyć utratę tokena, zarejestruj wywołanie zwrotne w instancji MediaProjection za pomocą metody registerCallback i zatrzymaj nagrywanie, gdy zostanie wywołana metoda onStop.

Więcej informacji znajdziesz w artykule Media projection (Projekcja multimediów).

Nagraj film

Aby uniemożliwić nagrywanie ekranu, możesz użyć DevicePolicyManager. W przypadku kont służbowych (Android for Work) administrator może wyłączyć zbieranie danych asystenta na profilu służbowym, używając metody setScreenCaptureDisabled.

Ćwiczenie z programowania Zarządzanie urządzeniami z Androidem bez aplikacji pokazuje, jak zabronić robienia zrzutów ekranu.

Przechwytywanie odtwarzanego 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 dotyczy dźwięku. Głównym przypadkiem użycia są aplikacje do odtwarzania strumieniowego, które chcą przechwytywać dźwięk odtwarzany przez gry.

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

Tworzenie aplikacji do przechwytywania

Ze względu na bezpieczeństwo i prywatność przechwytywanie odtwarzania podlega pewnym ograniczeniom. Aby aplikacja mogła nagrywać dźwięk, musi spełniać te wymagania:

Aby przechwytywać dźwięk z innej aplikacji, Twoja aplikacja musi utworzyć obiekt AudioRecord i dodać do niego AudioPlaybackCaptureConfiguration. Wykonaj te czynności:

  1. Wywołaj AudioPlaybackCaptureConfiguration.Builder.build(), aby utworzyć AudioPlaybackCaptureConfiguration.
  2. Przekaż konfigurację do AudioRecord, wywołując setAudioPlaybackCaptureConfig.

Kontrolowanie przechwytywania dźwięku

Twoja aplikacja może kontrolować, jakie typy treści może nagrywać i jakie inne rodzaje aplikacji mogą nagrywać jej odtwarzanie.

Ograniczanie przechwytywania według treści audio

Aplikacja może ograniczyć nagrywanie dźwięku za pomocą tych metod:

Pamiętaj, że nie możesz używać metod addMatchingUsage() i excludeUsage() jednocześnie. Musisz wybrać jedną z tych opcji. Nie możesz też używać jednocześnie addMatchingUid() i excludeUid().

Ograniczanie przechwytywania przez inne aplikacje

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

Wykorzystanie

Odtwarzacz generujący dźwięk musi ustawić jego wykorzystanie na USAGE_MEDIA, USAGE_GAME lub USAGE_UNKNOWN.

Zasada przechwytywania

Zasady przechwytywania odtwarzacza muszą mieć wartość AudioAttributes.ALLOW_CAPTURE_BY_ALL, która umożliwia innym aplikacjom przechwytywanie odtwarzania. Można to zrobić na kilka sposobów:

Jeśli te wymagania wstępne są spełnione, można przechwytywać dowolny dźwięk odtwarzany przez odtwarzacz.

Wyłączanie przechwytywania systemu

Opisane powyżej zabezpieczenia zezwalające na przechwytywanie dotyczą tylko aplikacji. Komponenty systemu Android mogą domyślnie 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. Z tego powodu zalecamy, aby aplikacje zezwalały systemowi na przechwytywanie odtwarzania. W rzadkich przypadkach, gdy nie chcesz, aby system przechwytywał odtwarzanie w aplikacji, ustaw zasadę przechwytywania na ALLOW_CAPTURE_BY_NONE.

Ustawianie zasad w czasie działania

Możesz wywołać AudioManager.setAllowedCapturePolicy(), aby zmienić zasadę przechwytywania, gdy aplikacja jest uruchomiona. Jeśli podczas wywoływania metody odtwarzany jest MediaPlayer lub AudioTrack, nie ma to wpływu na dźwięk. Aby zmiany zasad zaczęły obowiązywać, musisz zamknąć i ponownie otworzyć odtwarzacz lub ścieżkę.

Zasada = manifest + AudioManager + AudioAttributes

Zasady przechwytywania można określić w kilku miejscach, dlatego ważne jest, aby zrozumieć, jak są określane obowiązujące zasady. Zawsze stosowana jest najbardziej restrykcyjna zasada przechwytywania. Na przykład aplikacja, której plik manifestu zawiera setAllowedCapturePolicy="false", nigdy nie zezwoli aplikacjom niesystemowym na przechwytywanie dźwięku, nawet jeśli parametr AudioManager#setAllowedCapturePolicy jest ustawiony na ALLOW_CAPTURE_BY_ALL. Podobnie, jeśli zasada AudioManager#setAllowedCapturePolicy ma wartość ALLOW_CAPTURE_BY_ALL, a plik manifestu ma ustawioną wartość setAllowedCapturePolicy="true", ale AudioAttributes odtwarzacza multimedialnego zostały utworzone za pomocą AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), aplikacje niesystemowe nie będą mogły przechwytywać tego odtwarzacza multimedialnego.

Tabela poniżej zawiera podsumowanie wpływu atrybutu manifestu i obowiązującej zasady:

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