40

TalkBack を使用してユーザーをガイドするアプリケーションを開発しています。ただし、そのような状況では、アプリケーションのレイアウトにいくつかの微妙な違いを持たせて、ナビゲーションが簡単になり、ユーザーをガイドするのに役立つ追加の音声出力 (TextToSpeech を使用) も備えたいと考えています。

私の問題は、ユーザーが TalkBack をアクティブにしている場合にのみ、これらの変更と追加の出力が必要なことです。

かどうかを知る方法はありますか?TalkBack 設定に直接アクセスするための具体的な方法は見つかりませんでしたが、一般的な電話設定にアクセスして、必要なものを知ることができる何らかの形式があることを期待していました。

よろしくお願いします。

4

8 に答える 8

81

AccessibilityManagerこれを行うための推奨される方法は、アクセシビリティ サービスの有効な状態を照会することです。

AccessibilityManager am = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE);
boolean isAccessibilityEnabled = am.isEnabled();
boolean isExploreByTouchEnabled = am.isTouchExplorationEnabled();
于 2012-09-11T03:57:03.440 に答える
8

Novoda は、このチェックを行うaccessibilitoolsと呼ばれるライブラリをリリースしました。アクセシビリティ マネージャーに問い合わせて、「音声フィードバック」フラグをサポートする有効なアクセシビリティ サービスがあるかどうかを確認します。

AccessibilityServices services = AccessibilityServices.newInstance(context);
services.isSpokenFeedbackEnabled();

public boolean isSpokenFeedbackEnabled() {
    List<AccessibilityServiceInfo> enabledServices = getEnabledServicesFor(AccessibilityServiceInfo.FEEDBACK_SPOKEN);
    return !enabledServices.isEmpty();
}

private List<AccessibilityServiceInfo> getEnabledServicesFor(int feedbackTypeFlags) {
    return accessibilityManager.getEnabledAccessibilityServiceList(feedbackTypeFlags);
}
于 2016-04-28T13:03:46.220 に答える
6

例として、Eyes-Free シェル アプリケーションの HomeLauncher.java ファイルを見てくださいisScreenReaderActive()(グループスレッド経由)。

要約すると、インテントを使用してすべてのスクリーン リーダーを検出し、それぞれのステータス プロバイダーにクエリを実行して、アクティブかどうかを確認します。

本当に TalkBack のみに制限したい場合は、ResolveInfo.serviceInfo.packageName返された for each の結果をチェックしてqueryIntentServices()、それが TalkBack パッケージと一致するかどうかを確認してみてください。

于 2011-02-25T23:06:41.167 に答える