English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Использование Intent для вызова программы распознавания голоса
Описание
В Android распознавание голоса реализуется主要通过 RecognizerIntent, на самом деле код очень прост, но если找不到 устройство для распознавания голоса, будет выброшено исключение ActivityNotFoundException, поэтому нам нужно перехватывать это исключение. 而且 распознавание голоса на симуляторе не возможно проверить, так как распознавание голоса требует доступа к云端 данным Google, поэтому если сеть телефона не включена, распознавание голоса не может быть выполнено! Обязательно включите сеть телефона, если телефон не имеет функции распознавания голоса, также не возможно активировать распознавание!
Внимание: перед использованием необходимо установить программу для распознавания голоса. Например, "Voice Search", которая использует технологию распознавания голоса от Google, и Intent может распознать эту программу.
Этот пример взят из примеров android:
development/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.java
Ядро кода и описание
package com.example.test; import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.speech.RecognizerIntent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends Activity implements OnClickListener { private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.btn); //识别按钮 PackageManager pm = getPackageManager(); List activities = pm.queryIntentActivities(new Intent( RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); //本地识别程序 // new Intent(RecognizerIntent.ACTION_WEB_SEARCH), 0); //网络识别程序 /* * В данном случае исключение не перехватывается, а проверяется наличие приложения для распознавания голоса. * Также можно перехватить исключение ActivityNotFoundException в методе startRecognizerActivity() */ if (activities.size() != 0) { btn.setOnClickListener(this); } else { // Если не обнаружено приложение для распознавания голоса на этом устройстве, кнопку нужно сделать неактивной btn.setEnabled(false); btn.setText("Не обнаружено устройство для распознавания голоса"); } } public void onClick(View v) { if (v.getId() == R.id.btn) { startRecognizerActivity(); } } // Начало распознавания private void startRecognizerActivity() { // Передача модели распознавания голоса через Intent, начало голоса Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); // Модель языка и свободный режим распознавания голоса intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); // Подсказка для начала голоса intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Начать голос"); // Начало распознавания голоса startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); // Вызов интерфейса распознавания } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // Возврат данных, полученных из Google if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { // Получение символов голоса ArrayList<String> results = data .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); String resultString = ""; for (int i = 0; i < results.size(); i++) { resultString += results.get(i); } Toast.makeText(this, resultString, Toast.LENGTH_SHORT).show(); } // Обратный вызов после распознавания голоса, отображение распознанного текста в Toast super.onActivityResult(requestCode, resultCode, data); } }
Основной принцип заключается в том, чтобы отправить голос на облачный сервис Google, затем обработать его в облаке, соответствовать соответствующим данным и отправить их на клиент.
В конце не забудьте добавить разрешение на доступ к сети в манифесте:
<uses-permission android:name="android.permission.INTERNET" />
Эффект после выполнения:
Вот так и выглядит собрание материалов по реализации голосового распознавания в Android, продолжим добавлять соответствующие материалы, спасибо всем за поддержку нашего сайта!
Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору, контент предоставлен пользователями Интернета, сайт не имеет права собственности, не был отредактирован вручную и не несет ответственности за соответствующие юридические последствия. Если вы обнаружите подозрительное нарушение авторских прав, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для сообщения о нарушении и предоставьте соответствующие доказательства. Если подтвердится, сайт немедленно удаляет涉嫌侵权的内容。