[prg] Re[4]: Как сразу при входе в activity озвучить talkback подсказку у editTe
Здравствуйте Анатолий. Вы писали
> Но если предполагается использовать tts с целью подменить скринридер,
> когда
> он активен, то это не самое хорошее решение.
Обоснуйте пожалуйста почему? Я лично предпочитаю tts по следующим
причинам: 1. в одном из моих приложений мне нужно было в цикле выводить
информацию. Когда итераций было слишком много,при использовании метода
announceForAccessibility начинал подтормаживать talback,а вот при
использовании tts всё работало без тормозов. 2. Возможно я не прав,но
при использовании метода announceForAccessibility не выводится вся
информация,когда сообщений слишком много,т.е что-то
пропускается,хотя,возможно,я не прав. 3. Этот метод не корректно
работает на очень старых версиях android,к примеру у моего друга на
android 4.1.1 (по-моему api 17) вместо нужной мне информации выводился
contentDescription моего view,у которого я и использую метод
announceForAccessibility,а вот tts работает даже вроде на android
2.2,хотя я в основном ставлю в своих приложениях как минимум минимальное
api 16. 4. В tts можно явно отследить начала вывода,процесс
вывода,завершение вывода,говорит ли сейчас tts и если да,то какую
фразу,и очень много других вещей,а вот с методом
announceForAccessibility это,как я понял,гораздо сложнее сделать. Хотя
честно сказать,пока что моя карточная игра использует именно этот метод
вывода информации,но я думаю перейти на tts. Я бы давно это сделал,но не
знаю,как заблокировать talkback во время работы tts,или как
сделать,чтобы,к примеру,talkback не читал информацию об изменении
размера списка,элемент,на который попадает фокус при явном запросе
фокуса у списка,изменение контента у некоторых view и т.д. Я пробовал
поиграться с xml атрибутом accessibilityLiveRegion (название может быть
написано не точно),но это мне почти ничего не дало,хотя,возможно,если
правильно использовать этот атрибут,то можно будет чего-то
добиться,только как правильно использовать этот атрибут,чтобы talkback
не читал того,о чём я писал выше? Хотя иногда интересно узнать
информацию об изменении контента,но как тогда подружить tts и talkback?
Я,конечно,пробовал использовать метод onStop в utteranceProgressListener
(название может быть написано не точно)и проверять,не был ли прерван
tts,но во-первых,когда tts прерывался,он повторял последнюю фразу,а
во-вторых происходила разбалансировка tts,т.е когда должна была
проговариваться следующая фраза,проговаривалась прерванная
фраза,хотя,возможно,я тут намудрил во-первых потому,что присваивал id
фразы самой фразе,т.е id фразы был равен той строке,которую говорил
tts,а во-вторых,как я понял,я выводил прерванную фразу,а чтобы этого
избежать,нужно каждое сообщение сохранять в отдельную строку. Ещё Вы пишете
> Можно, если корректно сформируете и пошлёте соответствующий
> AccessibilityEvent.
Т.е Вы имеете ввиду,что мне не нужно использовать метод
sendAccessibilityEvent по-моему с целочисленным типом события,а нужно
использовать метод sendAccessibilityEvent,который в качестве параметра
принимает объект типа accessibilityEvent (все названия могут быть
неточными)? Если да,то подскажите пожалуйста,как корректно сформировать
это событие? Может быть есть где-то пример кода,который это делает,ведь
задача,на мой взгляд,совершенно не новая. Ещё Вы пишете
> А поскольку вы не хотите трогать фокус ввода
Я Вас не совсем понял,т.е что Вы имеете ввиду под фокусом ввода? У меня
при создании activity сразу попадает фокус на editText и показывается
клавиатура для ввода. Фокус запрашивается в xml макете activity,с
использованием тега requestFocus. Ещё Вы пишете
> Попробуйте отслеживать состояние аудио-фокуса.
Я вас не совсем понял. Вы имеете ввиду,что нужно отслеживать потерю
аудио фокуса у моего приложения,или потерю аудиофокуса у talkback?
Заранее благодарю Вас за помощь.