このガイドでは、Android TV でのユーザー補助に関するおすすめの方法と、ネイティブ アプリと非ネイティブ アプリの両方における推奨事項について説明します。
TV アプリにとってユーザー補助が重要なのはなぜですか?
視覚障がいはテレビの視聴者の間で珍しいものではありません。 世界保健機関(WHO)によると、世界中で 22 億人が視覚障がいを持つと推定されています。2018 年国民保健インタビュー調査によると、米国では 18 歳以上のアメリカ人の 3,200 万人が重大な視力喪失を経験しています。欧州盲検連合(EBU)によると、ヨーロッパでは 3,000 万人の目の見えない人と半目の視力の人がいると推定されています。
最も重要なことは、視覚障がいのあるユーザーが、全視力の仲間と同じようにメディア コンテンツを楽しんでいることです。Comcast が委託した 2017 年の調査では、目の見えないまたはロービジョンのユーザーの 96% が定期的にテレビを見ており、81% が 1 日あたり 1 時間以上視聴していることがわかっています。しかし、回答者の 65% は、テレビ放送中の番組の検索時に問題が発生したことも報告しています。また、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); }