Пишемо додаток для читання вхідних повідомлень (TTS – Text-to-Speech)

Створюємо новий проект, мінімальну версію Android виставляємо 2.3. Створюємо порожню активністьEmptyActivity.

Нашому майбутньому додатку потрібно отримати 3 дозволи у файлі маніфесту:

-RECEIVE_SMS – для прийому смс повідомлень;

-READ_SMS – для читання смс повідомлень;

-READ_CONTACTS – для відображення імені того, чиє повідомлення надійшло.

ДодамоAndroidManifest.xml наступні рядки:

Наш додаток буде мати лише портретну орієнтацію, тому оголосимо про це у тегу:

На цьому робота з файломAndroidManifest.xml закінчена.

Відредагуємо файлstrings.xml, додавши туди наступні рядки:

Тепер візьмемося за налаштування зовнішнього вигляду нашої програми. Відкриваємо файл інтерфейсуactivity_main.xml. Нам потрібно додати елементи:

-TextView - для відображення імені того, чия остання смс до нас прилетіла;

-TextView - для відображення вмісту останньої смс;

-ToggleButton - перемикач для увімкнення та вимикання читання повідомлень.

Після додавання необхідних елементів наш layout файл має вигляд:

Тепер створимо новий клас для налаштування нашого балакуна. Створюємо новий java класSpeaker.java. Він буде використовуватися для того, щоб уникнути запускуTTSAPI разом з основнимActivity. Цей клас здійснюватимеOnInitListener інтерфейс, який повідомлятиме, що TTS готовий до використання. Ми запишемо цей показник готовності до роботи як логічну змінну з ім'ям ready. Також задамо ще одну логічну змінну allowed, яка набуває значенняtrue, коли користувач дозволив TTS промовляти повідомлення. Також ми створимо методи для отримання та налаштування значень цих змінних. Отже, якщо все сказане ввести в наш клас, він набуде такого вигляду:

ІнтерфейсOnInitListener має лише один метод -onInit. Цей метод виконується, коли TTS ініціалізований. ПараметрStatus дозволяє дізнатися, як пройшла ініціалізація. Коли підтверджується, що ініціалізація пройшла успішно, ми маємо налаштувати потрібну мову для TTS. Тому додаємо цей метод:

Також нам потрібно додати метод, який створюватиме нам певну затримку між програванням слів. Ми будемо використовувати цей метод для того, щоб читати програму тексту більш чистим. Додамо для цього новий метод:

Ну і, нарешті, додамо метод, що вимикає нашу шарманку, коли вона нам не потрібна, щоб не завантажувати даремно оперативку пристрою:

Тепер відредагуємо файлMainActivity.java. Нам потрібно оголосити тут про створені в layout елементи (TextView іToggleView ), оголосити дві цілих величиниLONG_DURATION іSHORT_DURATION, вони будуть використовуватися у методіpause класуSpeaker.java. Також оголошуємо цілу величинуCHECK_CODE, її значення не важливо, вона буде використовуватися в методіstartActivityforResult для визначення результату. Також оголошуємо об'єктиSpeaker таBroadcastReceiver. На даний моментMainActivity.java має вигляд:

Додамо метод, який перевірятиме, чи встановлено на пристрої TTS. Перевірка виконується використанням результату з класуSpeaker.java.

Коли результат ізstartActivityForResult отримано, викликається методonActivityResult.У цьому методі, якщо ми отримуємо позитивний результат перевірки, ми ініціалізуємо об'єктSpeaker, якщо результат негативний - пропонуємо користувачеві встановити TTS.

Тепер, щоб встановити зв'язок із вхідними повідомленнями, створюємо об'єктBroadcastReceiver. Щоразу, коли надходить нове повідомлення, викликається метод onReceive цього об'єкта. Далі, використовуючи класSmsMessage, виконується аналіз повідомлення. Після цього ми використовуємо методиgetDisplayMessageBody таgetOriginatingAddress для вилучення з проведеного аналізу потрібної нам інформації.

За допомогою отриманої завдяки проведеному аналізу інформації ми створюємо текст, який зачитуватиме TTS. Створюємо паузу довжиноюLONG_DURATION перед читанням нового вхідного повідомлення і паузуSHORT_DURATION між читанням імені надісланого смс і текстом самого повідомлення.

Перед використаннямBroadcastReceiver його потрібно зареєструвати. Створюємо фільтр для вхідних текстових повідомленьIntentFilter та реєструємоsmsReceiver :

Настав час попрацювати над методом onCreate. Тут ми ініціалізуємо усі оголошені об'єкти. Також ініціалізуємоtoggleListener для налаштування значенняallowed з класуSpeaker.java.

Після ініціалізації викликаємо методиcheckTTS,initializeSMSReceiver,registerSMSReceiver :

Ну і під кінець, використовуємо метод onDestroy для відключення нашого TTS, щоб він не займав даремно ресурси, коли ми його не використовуємо:

Також пропоную ознайомитися з уроком реалізації перетворення голосу в текст. Успіхів!