Nagrywaj filmy i dźwięki

Aplikacja może nagrywać wideo lub dźwięk odtwarzany z innej aplikacji. Takie aplikacje muszą prawidłowo obsługiwać token MediaProjection. Na tej stronie dowiesz się, jak to zrobić. Wyjaśniamy 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 postępować z tokenem MediaProjection

Interfejs MediaProjection API umożliwia aplikacjom uzyskanie tokena MediaProjection, który zapewnia jednorazowy dostęp do przechwytywania zawartości ekranu lub dźwięku. System operacyjny Android prosi użytkownika o zgodę przed przyznaniem tokena 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 takiej sytuacji wirtualne wyświetlacze lub strumienie audio powiązane z sesją przestają odbierać strumienie multimediów. Aplikacja musi odpowiednio reagować na to zdarzenie, w przeciwnym razie będzie nadal rejestrować ciszę lub czarny strumień wideo.

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 Rejestrowanie multimediów.

Nagraj film

Aby zapobiec nagrywaniu ekranu, możesz użyć DevicePolicyManager. W przypadku kont firmowych (Android for Work) administrator może wyłączyć zbieranie danych asystenta w profilu służbowym za pomocą metody setScreenCaptureDisabled.

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

Nagrywanie odtwarzanego dźwięku

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 w przypadku dźwięku. Głównym przypadkiem użycia jest przechwytywanie dźwięku z gier przez aplikacje do strumieniowania.

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

Tworzenie aplikacji do przechwytywania

Ze względów bezpieczeństwa i prywatności przechwytywanie odtwarzania podlega pewnym ograniczeniom. Aby aplikacja mogła rejestrować dźwięk, musi spełniać te wymagania:

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

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

Sterowanie rejestrowaniem dźwięku

Aplikacja może kontrolować, jakie typy treści może nagrywać i jakie inne aplikacje mogą nagrywać jej odtwarzanie.

Ograniczanie rejestrowania na podstawie treści audio

Aplikacja może ograniczyć zakres przechwytywanego dźwięku, korzystając z tych metod:

Pamiętaj, że nie możesz używać jednocześnie metod addMatchingUsage() i excludeUsage(). 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 przechwytywać tylko wtedy, gdy spełnia ona te wymagania:

Wykorzystanie

Odtwarzacz generujący dźwięk musi określić jego użycie jako USAGE_MEDIA, USAGE_GAME lub USAGE_UNKNOWN.

Zasady przechwytywania

Zasady przechwytywania odtwarzacza muszą mieć wartość 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 przechwycić dowolny dźwięk odtwarzany przez odtwarzacz.

Wyłączanie przechwytywania systemowego

Opisane powyżej zabezpieczenia umożliwiające przechwytywanie dotyczą tylko aplikacji. Komponenty systemu Android mogą domyślnie przechwytywać 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 umożliwiały systemowi rejestrowanie odtwarzania. W rzadkich przypadkach, gdy nie chcesz, aby system rejestrował odtwarzanie w Twojej aplikacji, ustaw zasadę rejestrowania na ALLOW_CAPTURE_BY_NONE.

Ustawianie zasad w czasie działania

Możesz wywołać funkcję AudioManager.setAllowedCapturePolicy(), aby zmienić zasady przechwytywania podczas działania aplikacji. Jeśli w momencie wywołania metody odtwarzany jest obiekt MediaPlayer lub AudioTrack, dźwięk nie zostanie zmieniony. Aby zmiana zasad zaczęła obowiązywać, musisz zamknąć i ponownie otworzyć odtwarzacz lub ścieżkę.

Zasady = manifest + AudioManager + AudioAttributes

Zasady przechwytywania można określić w kilku miejscach, dlatego ważne jest, aby wiedzieć, jak są one wyznaczane. Zawsze stosowane są najbardziej restrykcyjne zasady dotyczące rejestrowania. Na przykład aplikacja, której manifest zawiera uprawnienie setAllowedCapturePolicy="false", nigdy nie zezwoli aplikacjom niesystemowym na przechwytywanie dźwięku, nawet jeśli atrybut AudioManager#setAllowedCapturePolicy ma wartość ALLOW_CAPTURE_BY_ALL. Podobnie jeśli zasada AudioManager#setAllowedCapturePolicy ma wartość ALLOW_CAPTURE_BY_ALL, a plik manifestu określa setAllowedCapturePolicy="true", ale elementy AudioAttributes odtwarzacza multimediów zostały utworzone z użyciem AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), to odtwarzacz multimediów nie będzie mógł być przechwytywany przez aplikacje inne niż systemowe.

W tabeli poniżej znajdziesz podsumowanie wpływu atrybutu pliku manifestu i obowiązujących zasad:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
prawda dowolnej aplikacji, tylko system nie rejestruje,
fałsz tylko system tylko system nie rejestruje,