Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.187.24] |
|
Сообщ.
#1
,
|
|
|
package com.example.gg; import java.util.ArrayList; import java.util.HashMap; import java.util.Locale; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.speech.RecognizerIntent; import android.speech.tts.TextToSpeech; import android.speech.tts.UtteranceProgressListener; import android.view.View; import android.widget.TextView; import java.io.IOException; import java.io.OutputStream; import java.util.UUID; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity implements TextToSpeech.OnInitListener { //Создание класса с // использованием интерфейса TextToSpeech.OnInitListener для инициализации синтезатора private static final String TAG = "bluetooth1"; private static final int REQUEST_ENABLE_BT = 1; private BluetoothAdapter btAdapter = null; private BluetoothSocket btSocket = null; private OutputStream outStream = null; Button btnOn, btnOff; // SPP UUID сервиса private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // MAC-адрес Bluetooth модуля private static String address = "20:15:01:29:11:80"; /** Called when the activity is first created. */ public static final int CODE = 1234; public TextToSpeech tts; private TextView txtText; public String sp, spout; // Примеры строк вопросов public String sp10 = "как тебя зовут"; public String sp11 = "что ты умеешь"; public String sp12 = "что такое android"; public String sp13 = "какая погода в хмельницком"; public String sp14 = "откуда ты"; public String sp15 = "привет"; public String sp19 = "конец связи"; // Примеры строк ответов public String sp20 = "меня зовут маша"; public String sp21 = "я могу отвечать на простые вопросы"; public String sp22 = "это операционная система для планшетов, смартфонов, телевизоров, часов"; public String sp23 = "посмотрите в интернете, открываю браузер"; public String sp24 = "я из хмельницкого"; public String sp25 = "loke"; public String sp29 = "до свидания"; // Описание хеш карты для хранения // ключа (TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID - в нашем случае) // и любого значения - строки (например - "5678") private HashMap<String, String> params = new HashMap<String, String>(); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txtText = (TextView) findViewById(R.id.input_text); txtText.setText(""); txtText.setVisibility(View.GONE) ; txtText.setVisibility(View.VISIBLE) ; utteranceProgressListener textSpeech = new utteranceProgressListener(); //Экземпляр класса слушателя tts = new TextToSpeech(this, this); // Экземпляр класса синтезатора речи // Включить слушатель синтеза речи, который определяет начало и конец произнесенной синтезатором речи tts.setOnUtteranceProgressListener(textSpeech); setContentView(R.layout.activity_main); btnOn = (Button) findViewById(R.id.button); btnOff = (Button) findViewById(R.id.button); btAdapter = BluetoothAdapter.getDefaultAdapter(); checkBTState(); } public void spi() { // Вызов активности распознавания речи Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); // модель распознавания, оптимальная для коротких фраз intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); // Подсказка пользователю intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Говори громко и четко!"); // Запускается активити, выполняющее распознавание произнесенных // фраз и возвращающая результаты распознавания startActivityForResult(intent, CODE); } @Override public void onInit(int status) { // Инициализация синтезатора речи if (status == TextToSpeech.SUCCESS) { tts.setLanguage(Locale.ENGLISH);// использование языка синтезатора, установленного по умолчанию params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,"5678"); // Параметр необходимо передать // для вызова слушателя синтезируемой речи. params должен храниться в хеш карте, прописанной выше } else { txtText.setText("Инициализация не выполнена"); } } protected void onActivityResult(int requestCode, int resultCode, Intent data){//Возврат результата распознавания речи super.onActivityResult(requestCode, resultCode, data); // Если это результаты распознавания речи (CODE) // и процесс распознавания прошел успешно txtText.setText(""); txtText.setVisibility(View.GONE) ; txtText.setVisibility(View.VISIBLE) ; switch (requestCode){ case CODE: { if (resultCode == RESULT_OK && null != data) { // получаем список текстовых строк - результат распознавания. // Строк может быть несколько, так как не всегда удается точно распознать речь. // Более правильные результаты идут в начале списка ArrayList<String> spee = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); sp =spee.get(0); // Из массива строк - результатов распознавания выбирается одна - самая первая txtText.setText(sp); spout = sp; // Сопоставления результата распознавания со строками вопросов int r10 = sp.compareTo(sp10); int r11 = sp.compareTo(sp11); int r12 = sp.compareTo(sp12); int r13 = sp.compareTo(sp13); int r14 = sp.compareTo(sp14); int r15 = sp.compareTo(sp15); int r19 = sp.compareTo(sp19); // В зависимости от результата сопоставления выбирается тот или иной ответ if (r10 == 0) spout = sp20; if (r11 == 0) spout = sp21; if (r12 == 0) spout = sp22; if (r13 == 0) spout = sp23; if (r14 == 0) spout = sp24; if (r15 == 0) spout = sp25; if (r19 == 0) spout = sp29; // Синтез речи для выбранного ответа // tts.speak(spout, TextToSpeech.QUEUE_ADD, null); String text = "hi people"; if (sp.equals("Привет")) { tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);} String text2 = "I propably solushion function"; if (sp.equals("что ты умеешь")) { tts.speak(text2, TextToSpeech.QUEUE_FLUSH, null);} String text3 = "I know not all"; if (sp.equals("что ты знаешь")) { tts.speak(text3, TextToSpeech.QUEUE_FLUSH, null);} } } break; } BluetoothAdapter btAdapter = null; BluetoothSocket btSocket = null; } public void click(View view) { // Вызов активности распознавателя голоса при нажатии на кнопку txtText.setText(""); txtText.setVisibility(View.GONE) ; txtText.setVisibility(View.VISIBLE) ; BluetoothAdapter btAdapter = null; BluetoothSocket btSocket = null; spi(); sendData("0"); Toast.makeText(getBaseContext(), "Выключаем LED", Toast.LENGTH_SHORT).show(); } // Обьявление класса utteranceProgressListener, наследуемый от класса UtteranceProgressListener // Он необходим для выполнения действий после прослушивания синтеза речи. public class utteranceProgressListener extends UtteranceProgressListener { @Override public void onDone(String utteranceId) {// Метод вызывается, когда синтезированное высказывание завершено int stop_r = sp.compareTo("конец связи"); int r13 = sp.compareTo(sp13); if ( r13==0 ) { Intent brIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://pogoda.yandex.ua/khmelnitsky/details")); startActivity(brIntent); stop_r=0; } // Не вызывать активность распознавание голоса, если произнесена фраза // "конец связи" или "какая погода в хмельницком" if( stop_r != 0 ) spi(); } @Override public void onStart(String utteranceId) {// Метод вызывается, когда синтезированное высказывание начинается } @Override public void onError(String utteranceId) { } } @Override public void onResume() { super.onResume(); Log.d(TAG, "...onResume - попытка соединения..."); // Set up a pointer to the remote node using it's address. BluetoothDevice device = btAdapter.getRemoteDevice(address); // Two things are needed to make a connection: // A MAC address, which we got above. // A Service ID or UUID. In this case we are using the // UUID for SPP. try { btSocket = device.createRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e) { errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + "."); } // Discovery is resource intensive. Make sure it isn't going on // when you attempt to connect and pass your message. btAdapter.cancelDiscovery(); // Establish the connection. This will block until it connects. Log.d(TAG, "...Соединяемся..."); try { btSocket.connect(); Log.d(TAG, "...Соединение установлено и готово к передачи данных..."); } catch (IOException e) { try { btSocket.close(); } catch (IOException e2) { errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + "."); } } // Create a data stream so we can talk to server. Log.d(TAG, "...Создание Socket..."); try { outStream = btSocket.getOutputStream(); } catch (IOException e) { errorExit("Fatal Error", "In onResume() and output stream creation failed:" + e.getMessage() + "."); } } @Override public void onPause() { super.onPause(); Log.d(TAG, "...In onPause()..."); if (outStream != null) { try { outStream.flush(); } catch (IOException e) { errorExit("Fatal Error", "In onPause() and failed to flush output stream: " + e.getMessage() + "."); } } try { btSocket.close(); } catch (IOException e2) { errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + "."); } } private void checkBTState() { // Check for Bluetooth support and then check to make sure it is turned on // Emulator doesn't support Bluetooth and will return null if(btAdapter==null) { errorExit("Fatal Error", "Bluetooth не поддерживается"); } else { if (btAdapter.isEnabled()) { Log.d(TAG, "...Bluetooth включен..."); } else { //Prompt user to turn on Bluetooth Intent enableBtIntent = new Intent(btAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } } } private void errorExit(String title, String message){ Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show(); finish(); } private void sendData(String message) { byte[] msgBuffer = message.getBytes(); Log.d(TAG, "...Посылаем данные: " + message + "..."); try { outStream.write(msgBuffer); } catch (IOException e) { String msg = "In onResume() and an exception occurred during write: " + e.getMessage(); if (address.equals("00:00:00:00:00:00")) msg = msg + ".\n\nВ переменной address у вас прописан 00:00:00:00:00:00, вам необходимо прописать реальный MAC-адрес Bluetooth модуля"; msg = msg + ".\n\nПроверьте поддержку SPP UUID: " + MY_UUID.toString() + " на Bluetooth модуле, к которому вы подключаетесь.\n\n"; errorExit("Fatal Error", msg); } } } Пытаюсь сделать голосовое управление. При запуске приложения устанавливается связь с блютус, но при попытке распознать речь получть результаты в текствью...оно распознает, говорит и теряется связь с блютус. ошибка в мак-ууид пишет.что делать? |
Сообщ.
#2
,
|
|
|
Отвечаю сама себе. все работает. отправлять данные в нужном месте надо было
|
Сообщ.
#3
,
|
|
|
Процедуру onDone лучше так переделать:
public void onDone(String utteranceId) {// Метод вызывается, когда синтезированное высказывание завершено int r13 = sp.compareTo( sp13 ); if( r13==0 ) { Intent brIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://pogoda.yandex.ua/khmelnitsky/details")); startActivity( brIntent ); //stop_r=0; }else { int stop_r = sp.compareTo("конец связи"); // Не вызывать активность распознавание голоса, если произнесена фраза // "конец связи" или "какая погода в хмельницком" if( stop_r != 0 ) spi(); } } |
Сообщ.
#4
,
|
|
|
Цитата тигр @ нет не работает. вопрос.где в коде уже конечные результаты на форме приходят и закрывается гугл аналшиз? Добавлено Цитата тигр @ Просто на момент соединения с гуглом блютус отключается. результаты заносятся в текствью не сразу. как только заносятся и появляется форма, блютус устанавливает опять связь. и не могу поймать момент когда отправить данные вовремя в коде. |
Сообщ.
#5
,
|
|
|
Цитата тигр @ При добавление кнопки с отправкой результатов все работает. Пользователь нажимает кнопку отправить и все работает, но хотелось бы на автомате без кнопок |