Systemeinstellungen für Untertitel übernehmen

Android TV bietet Einstellungen, mit denen Nutzer Untertitel-Einstellungen zentral festlegen können, um eine einheitliche Nutzung über alle Media-Apps hinweg zu ermöglichen.

Mit diesen Einstellungen können Nutzer Untertitel aktivieren, eine bevorzugte Sprache auswählen und einen benutzerdefinierten Untertitelstil festlegen. Nutzer können auch angeben, ob sie vereinfachte Untertitel auf dem Niveau der 3. Klasse bevorzugen, die als „Easy Reader“ bezeichnet werden.

In diesem Leitfaden erfahren Sie, wie Sie vom System bereitgestellte Untertiteleinstellungen abrufen und auf die Untertitel in Ihrer App anwenden.

Die Untertiteloptionen, einschließlich einer Vorschau des ausgewählten Untertitelstils, finden Sie unter Einstellungen > Bedienungshilfen > Untertitel:

Das Menü mit den Untertiteleinstellungen auf Android TV
Abbildung 1. Seite „Einstellungen für Untertitel“

CaptioningManager abrufen

Rufen Sie den Dienst CaptioningManager aus einer Aktivität über Context ab:

CaptioningManager captioningManager = (CaptioningManager) context.getSystemService(Context.CAPTIONING_SERVICE);

Änderungen an den Untertiteleinstellungen verarbeiten

Änderungen an den Untertiteleinstellungen können Sie mit der Klasse CaptioningChangeListener verarbeiten:

if (captioningManager != null) {
  // Define a class to store the CaptionStyle details.
  CurrentCaptionStyle currentCaptionStyle = new CurrentCaptionStyle();
  // Define the listeners.
  captioningManager.addCaptioningChangeListener(new CaptioningChangeListener() {

    @Override
    public void onEnabledChanged(boolean enabled) {
      super.onEnabledChanged(enabled);
      Log.d(TAG, "onEnabledChanged");
      currentCaptionStyle.isEnabled = enabled;
    }

    @Override
    public void onLocaleChanged(@Nullable Locale locale) {
      super.onLocaleChanged(locale);
      Log.d(TAG, "onLocaleChanged");
      currentCaptionStyle.locale = locale;
      if (locale == null) {
        currentCaptionStyle.isEasyReaderEnabled = false;
      } else {
        currentCaptionStyle.isEasyReaderEnabled = locale.getVariant().contains("simple");
      }
    }

    @Override
    public void onFontScaleChanged(float fontScale) {
      super.onFontScaleChanged(fontScale);
      Log.d(TAG, "onFontScaleChanged");
      currentCaptionStyle.fontScale = fontScale;
    }

    @Override
    public void onUserStyleChanged(@NonNull CaptionStyle userStyle) {
      super.onUserStyleChanged(userStyle);
      Log.d(TAG, "onUserStyleChanged");
      currentCaptionStyle.hasBackgroundColor = userStyle.hasBackgroundColor();
      currentCaptionStyle.backgroundColor = userStyle.backgroundColor;
      currentCaptionStyle.backgroundOpacity = userStyle.backgroundColor >>> 24;
      currentCaptionStyle.hasForegroundColor = userStyle.hasForegroundColor();
      currentCaptionStyle.foregroundColor = userStyle.foregroundColor;
      currentCaptionStyle.foregroundOpacity = userStyle.foregroundColor >>> 24;
      currentCaptionStyle.hasWindowColor = userStyle.hasWindowColor();
      currentCaptionStyle.windowColor = userStyle.windowColor;
      currentCaptionStyle.windowOpacity = userStyle.windowColor >>> 24;
      currentCaptionStyle.hasEdgeColor = userStyle.hasEdgeColor();
      currentCaptionStyle.edgeColor = userStyle.edgeColor;
      currentCaptionStyle.hasEdgeType = userStyle.hasEdgeType();
      currentCaptionStyle.edgeType = userStyle.edgeType;
      currentCaptionStyle.typeFace = userStyle.getTypeface();
    }

  });
}

Alternativ können Sie die Methode getUserStyle direkt aufrufen:

CaptionStyle systemCaptionStyle = captioningManager.getUserStyle();