На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Следующие правила действуют в данном разделе в дополнение к общим Правилам Форума
1. Здесь обсуждается Java, а не JavaScript! Огромная просьба, по вопросам, связанным с JavaScript, SSI и им подобным обращаться в раздел WWW Masters или, на крайний случай, в Многошум.
2. В случае, если у вас возникают сомнения, в каком разделе следует задать свой вопрос, помещайте его в корневую ветку форума Java. В случае необходимости, он будет перемещен модераторами (с сохранением ссылки в корневом разделе).

3. Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.
4. Не рекомендуется создавать несколько несвязанных вопросов в одной теме. Пожалуйста, создавайте по одной теме на вопрос.
Модераторы: dark_barker, wind
  
> теряется связь с блютус, при нажатии на кнопку теряется связь с блютус
    ExpandedWrap disabled
      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);      
            }
          }
      }


    Пытаюсь сделать голосовое управление. При запуске приложения устанавливается связь с блютус, но при попытке распознать речь получть результаты в текствью...оно распознает, говорит и теряется связь с блютус. ошибка в мак-ууид пишет.что делать?
    Сообщение отредактировано: тигр -
      Отвечаю сама себе. все работает. отправлять данные в нужном месте надо было
        Процедуру onDone лучше так переделать:
        ExpandedWrap disabled
           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();
                      }
                  }
          Цитата тигр @

          нет не работает. вопрос.где в коде уже конечные результаты на форме приходят и закрывается гугл аналшиз?

          Добавлено
          Цитата тигр @

          Просто на момент соединения с гуглом блютус отключается. результаты заносятся в текствью не сразу. как только заносятся и появляется форма, блютус устанавливает опять связь. и не могу поймать момент когда отправить данные вовремя в коде.
            Цитата тигр @

            При добавление кнопки с отправкой результатов все работает. Пользователь нажимает кнопку отправить и все работает, но хотелось бы на автомате без кнопок
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script Execution time: 0,1036 ]   [ 17 queries used ]   [ Generated: 24.09.17, 01:31 GMT ]