Android TV のユーザー補助に関するおすすめの方法

このガイドでは、Android TV でのユーザー補助に関するベスト プラクティスと、ネイティブ アプリとネイティブ以外のアプリの両方に関する推奨事項について説明します。

テレビアプリでユーザー補助が重要なのはなぜですか?

テレビ視聴者には視覚障がいを持つ人が多くいます。世界保健機関(WHO)によると、視覚障がいのある人の数は世界で 22 億人と推定されています。2018 年国民健康調査によると、米国では 3,200 万人の 18 歳以上のアメリカ人が重大な視力喪失を経験しています。欧州盲人連盟(EBU)によると、欧州では盲人と弱視者が3,000 万人いると推定されています。

最も重要なことは、視覚障がいのあるユーザーが、視覚に障がいのないユーザーと同じようにメディア コンテンツを楽しめることです。Comcast が委託した2017 年の調査によると、目の不自由なユーザーや視力の弱いユーザーの 96% がテレビを定期的に視聴しており、81% が 1 日に 1 時間以上視聴しています。一方で、65% のユーザーは、テレビの番組を検索する際に問題が発生したと回答しています。また、2020 年に英国で実施された調査では、障がい者の 80% が、ビデオ オンデマンド ストリーミング サービスでユーザー補助に関する問題が発生したと回答しています。

支援技術は視覚障がいのあるユーザーをサポートできますが、テレビアプリのコンテンツ探索ジャーニーでユーザー補助をサポートすることも重要です。たとえば、ナビゲーション ガイダンスの提供や要素のラベル付けに特に注意し、TV アプリが TalkBack などのユーザー補助機能と適切に動作するようにしてください。これらの手順を行うと、視覚に障がいがあるユーザーの利便性が大幅に向上します。

アクセシビリティを改善するための第一歩は、認知度を高めることです。このガイドは、テレビアプリのユーザー補助に関する問題を検出するために役立ちます。

Android ユーザー補助機能のリソース

Android のユーザー補助機能について詳しくは、ユーザー補助機能の開発リソースをご覧ください。

テキストの拡大縮小

Android TV アプリは、さまざまなピクセル密度をサポートして、テキスト スケーリングに関するユーザーの設定を尊重する必要があります。

特に以下の点に注意してください。

  • UI コンポーネントの寸法には wrap_content を使用します。
  • テキストのスケールによってサイズが変化するときに、レイアウトがコンポーネントを再配置するようにします。
  • テキストを拡大しても、コンポーネントが画面に収まるようにしてください。
  • 柔軟性のないコンポーネントには、sp のテキストサイズ単位を使用しないでください。
  • カスタムビューで調整する FONT_SCALE の値を確認します。

    // Checking font scale with Context
    val scale = resources.configuration.fontScale
    Log.d(TAG, "Text scale is: " + scale)
    

テキストのスケールは次のコマンドで変更できます。

adb shell settings put system font_scale 1.2f

Android 12 以降では、デバイスの設定からテキストのスケーリングを変更できます。

キーボードレイアウト

Android 13(API レベル 33)以降では、getKeyCodeForKeyLocation() を使用して、想定されるキー位置のキーコードを検索できます。これは、ユーザーが一部のキーの場所を再マッピングした場合や、一般的なレイアウトではないキーボードを使用している場合に必要になることがあります。

音声による説明

Android 13(API レベル 33)以降では、システム規模の新しいユーザー補助設定により、ユーザーはすべてのアプリで音声による説明を有効にできます。Android TV アプリは、isAudioDescriptionRequested() でクエリを実行してユーザーの設定を確認できます。

Kotlin

private lateinit var accessibilityManager: AccessibilityManager

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)

// Where your media player is initialized
if (am.isAudioDescriptionRequested) {
    // User has requested to enable audio descriptions
}

Java

private AccessibilityManager accessibilityManager;

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager.class);

// Where your media player is initialized
if(accessibilityManager.isAudioDescriptionRequested()) {
    // User has requested to enable audio descriptions
}

Android TV アプリは、AccessibilityManager にリスナーを追加することで、ユーザーの設定が変更されたタイミングをモニタリングできます。

Kotlin

private val listener =
    AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
        // Preference changed; reflect its state in your media player
    }

override fun onStart() {
    super.onStart()

    accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}

override fun onStop() {
    super.onStop()

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}

Java

private AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -> {
    // Preference changed; reflect its state in your media player
};

@Override
protected void onStart() {
    super.onStart();

    accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);
}

@Override
protected void onStop() {
    super.onStop();

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);
}