Подтвердить что ты не робот

Как узнать, активен ли Android TalkBack?

Я разрабатываю приложение, которое использует TalkBack для управления людьми через него. Однако в таких ситуациях я хочу иметь некоторые тонкие различия в макете приложения, так что навигация проще, а также дополнительные голосовые выходы (с TextToSpeech), чтобы помочь пользователю.

Моя проблема в том, что мне нужны только эти изменения и дополнительные выходы, если у пользователя активен TalkBack.

Есть ли способ узнать, есть ли это? Я не нашел ничего конкретного для непосредственного доступа к настройкам TalkBack, но я надеялся, что есть какая-то форма доступа к общим настройкам телефона, которые могут дать мне знать, что мне нужно.

С уважением и благодарностью заранее.

4b9b3361

Ответ 1

В качестве примера рассмотрим isScreenReaderActive() в файле HomeLauncher.java в приложении оболочки Eye-Free (через групповой поток).

Подводя итог: вы обнаруживаете все читатели экрана с помощью Intents, затем запрашиваете у поставщика статуса каждого, чтобы узнать, активен ли он.

Если вы действительно хотите ограничить его только TalkBack, вы можете попробовать проверить ResolveInfo.serviceInfo.packageName для каждого результата, полученного из queryIntentServices(), чтобы узнать, соответствует ли он пакет TalkBack.

Ответ 2

Рекомендуемый способ сделать это - запросить AccessibilityManager для разрешенного состояния служб доступности.

AccessibilityManager am = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE);
boolean isAccessibilityEnabled = am.isEnabled();
boolean isExploreByTouchEnabled = am.isTouchExplorationEnabled();

Ответ 3

Novoda выпустила библиотеку под названием accessibilitools, которая выполняет эту проверку. Он запрашивает диспетчер доступности, чтобы проверить, есть ли какие-либо службы доступности, поддерживающие флаг "устной обратной связи".

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

Ответ 4

Для меня я решил эту проблему таким образом, она хорошо работает в моем проекте:

  • используйте getEnabledAccessibilityServiceList(), чтобы получить всю службу доступности, служба, статус которой открыт, будет в этом списке
  • В Talkback есть активность с именем com.android.talkback.TalkBackPreferencesActivity, вы можете перемещаться по списку, чтобы узнать, открыт ли сервис talkback.

Детальный код ниже:

    private static final String TALKBACK_SETTING_ACTIVITY_NAME = "com.android.talkback.TalkBackPreferencesActivity";

    public static boolean accessibilityEnable(Context context) {
        boolean enable = false;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            try {
                AccessibilityManager manager = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
                List<AccessibilityServiceInfo> serviceList = manager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN);
                for (AccessibilityServiceInfo serviceInfo : serviceList) {
                    String name = serviceInfo.getSettingsActivityName();
                    if (!TextUtils.isEmpty(name) && name.equals(TALKBACK_SETTING_ACTIVITY_NAME)) {
                        enable = true;
                    }
                }
            } catch (Exception e) {
                if (Logging.isDebugLogging()) {
                    e.printStackTrace();
                }
            }
        }
        return enable;
}

Ответ 5

Откройте системную настройку и перейдите к доступности и нажмите, чтобы отключить опцию "Назад"