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 zrzutu 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ść funkcja powtórki ma pewne ograniczenia. 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.

Sterowanie przechwytywaniem dźwięku

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 przechwycić 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ą być ustawione na AudioAttributes.ALLOW_CAPTURE_BY_ALL, co 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 aplikacji, ustaw zasadę przechwytywania na ALLOW_CAPTURE_BY_NONE.

Ustawianie zasady w czasie działania

Możesz wywołać AudioManager.setAllowedCapturePolicy(), aby zmienić zasadę przechwytywania podczas działania aplikacji. Jeśli podczas wywoływania metody MediaPlayer lub AudioTrack odtwarza dźwięk, 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 ustalane są 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 w pliku manifestu ustawiono 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.

Tabela poniżej podsumowuje efekt 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 brak przechwytywania
fałsz tylko system tylko system brak przechwytywania