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

このガイドでは、Android TV のユーザー補助機能に関するおすすめの方法と、ネイティブ アプリと非ネイティブ アプリの両方に対する推奨事項について説明します。

TV アプリでユーザー補助機能が重要なのはなぜですか?

TV を視聴する人々の間で視覚障がいを持つ人は少なくありません。 世界保健機関(WHO)によると、世界中で推定 22 億人が 視覚障がいを抱えています 。2018 年の国民健康インタビュー調査によると、米国では 18 歳以上の 3,200 万人が重度の視力低下を経験しています。欧州盲人連合(EBU)によると、ヨーロッパでは 3,000 万人 が全盲または弱視です。

最も重要なことは、視覚障がいのあるユーザーも、視覚に問題のないユーザーと同じようにメディア コンテンツを楽しんでいるということです。Comcast が委託した 2017 年の調査 によると、全盲またはロービジョンのユーザーの 96% が定期的に TV を視聴しており、81% が 1 日に 1 時間以上視聴しています。しかし、65% が TV で視聴できるコンテンツを探す際に問題に直面したと回答しています。また、英国で 2020 年に実施された調査では、障がい者の 80% がビデオ オンデマンド ストリーミング サービスでユーザー補助機能の問題を経験したと回答しています。

支援技術は弱視のユーザーをサポートできますが、TV アプリのコンテンツ検索の過程でユーザー補助機能をサポートすることも重要です。 たとえば、ナビゲーション ガイダンスの提供や要素の適切なラベル付けに特に注意し、TV アプリが TalkBack などのユーザー補助機能と適切に連携するようにします。これらの手順により、視覚障がいのあるユーザーのエクスペリエンスを大幅に改善できます。

ユーザー補助機能を改善するための第一歩は、認識を高めることです。このガイドは、TV アプリのユーザー補助機能の問題を特定するのに役立ちます。

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);
}