Nagrywaj filmy i dźwięki

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:

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 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:

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:

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