Отправляет email-рассылки с помощью сервиса Sendsay

За 2018-03-12

[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?
Заранее благодарю Вас за помощь.

   2018-03-12 03:46:42 (#3552047)

[prg] Re[3]: Как сразу при входе в activity озвучить talkback подсказку у editTe

Приветствую всех.

> что мне нужно при
> создании activity в методе oncreate явно выводить что-то типа "введите
> имя окно редактирования",т.е использовать tts,уведомления,или метод view
> announceForAccessibility,

Только не в onCreate(), а например, в onResume().
В onCreate() окно ещё не существует на экране.
Но если предполагается использовать tts с целью подменить скринридер, когда
он активен, то это не самое хорошее решение.

> а явно заставить talkback читать подсказку поля
> ввода,как talkback это делает когда я явно фокусируюсь на этом
> поле,нельзя?

Можно, если корректно сформируете и пошлёте соответствующий
AccessibilityEvent.
Когда вы принудительно помещаете фокус ввода в EditText, то соответствующий
AccessibilityEvent формирует система.
А поскольку вы не хотите трогать фокус ввода, то придется вам самому
формировать нужное событие (например, с типом
TYPE_VIEW_ACCESSIBILITY_FOCUSED).
Как я понял, это у вас не получается, поэтому предложил менее сложный
вариант с методом View.announceForAccessibility(), который тоже создает и
отсылает событие AccessibilityEvent но с типом TYPE_ANNOUNCEMENT.

> Кстати можно ли,и если да,то как,отследить,когда talkback
> начал говорить,когда закончил и т.д,чтобы я мог запустить tts,поскольку
> talkback с ним конфликтует.

Попробуйте отслеживать состояние аудио-фокуса.

   "i_chay" 2018-03-12 01:00:03 (#3552044)