Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.94 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.io.OutputStream;
  4. import java.util.ArrayList;
  5. import java.util.UUID;
  6. import android.os.Bundle;
  7. import android.os.Handler;
  8. import android.speech.RecognizerIntent;
  9. import android.util.Log;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.widget.ArrayAdapter;
  13. import android.widget.Button;
  14. import android.widget.EditText;
  15. import android.widget.Toast;
  16. import android.app.Activity;
  17. import android.bluetooth.BluetoothAdapter;
  18. import android.bluetooth.BluetoothDevice;
  19. import android.bluetooth.BluetoothSocket;
  20. import android.content.Intent;
  21. import android.util.Log;
  22.  
  23.  
  24. public class Menu extends Activity implements OnClickListener{
  25.    
  26.     //Variavel do Sintetizador de Voz---------------
  27.      private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
  28.      
  29.      
  30.      
  31.      //Tag para o log d do android
  32.      private static final String TAG = "Thiago";
  33.      
  34.      //Variaveis da Conexao Bluetooth--------------
  35.      private BluetoothAdapter mBluetoothAdapter = null;
  36.      private BluetoothSocket btSocket = null;
  37.      private OutputStream outStream = null;
  38.    
  39.      //endereco de conexao BT a ser pareado do arduino
  40.      private static String address = "20:13:01:24:02:08";
  41.      //meu id do android
  42.      private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
  43.  
  44.  
  45.  
  46.  
  47.      //inputStream para armazenar as entradas
  48.      private InputStream inStream = null;
  49.    
  50.      //Thread do Android
  51.      Handler handler = new Handler();
  52.    
  53.      //delimitador fr Bits a serem enviados
  54.      byte delimiter = 10;
  55.    
  56.      boolean stopWorker = false;
  57.    
  58.      //ponteiro para leitura do Buffer
  59.      int readBufferPosition = 0;
  60.    
  61.      //Buffer de Bits
  62.      byte[] readBuffer = new byte[1024];
  63.    
  64.      //boolean para conexão
  65.      boolean conetado =false;
  66.      
  67.      
  68.    
  69.        //Variavel que armazena o dado a ser enviado
  70.        String dadoEnviarSintetizador = "";
  71.      
  72.        //variavel que armazena o dado apos o tratamento (validação)
  73.        String dadoSintetizado ="";
  74.    
  75.      //Componentes Android
  76.         Button botaoConectar;
  77.         Button botaoSintetizador;  
  78.         EditText edit;
  79.    
  80.        
  81.     @Override
  82.     protected void onCreate(Bundle savedInstanceState) {
  83.        
  84.         super.onCreate(savedInstanceState);
  85.         //chama o XML da Activity
  86.         setContentView(R.layout.menu);
  87.        
  88.        
  89.         //cria o Alias para os componentes do XML
  90.         edit = (EditText) findViewById(R.id.editText1);      
  91.         botaoConectar = (Button) findViewById(R.id.botaoConectar);
  92.         botaoSintetizador = (Button) findViewById(R.id.botaoSintetizador);
  93.  
  94.        
  95.        
  96.         //Implementa On Click Listenner para o botão de conexao
  97.         //por ser mais estavel para esta tarefa de conexão
  98.         botaoConectar.setOnClickListener(this);
  99.        
  100.         //seta o botão Sintetizador como desativado
  101.         //para não tentar enviar os dados antes de conectar
  102.          botaoSintetizador.setEnabled(false);
  103.          edit.setEnabled(false);
  104.        
  105.  
  106.        
  107.              
  108.              
  109.  
  110.                 try{
  111.                 //checa o bluetooth
  112.                 CheckBt();
  113.                 //inicia a paridade
  114.                 BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
  115.                 Log.e("Teste", device.toString());
  116.  
  117.                 }catch (Exception e) {
  118.                     // TODO: handle exception
  119.                 }
  120.        
  121.            try{
  122.             //Listener do botao do Sintetizador de Voz  
  123.             botaoSintetizador.setOnClickListener(new OnClickListener() {
  124.                 public void onClick(View v) {
  125.                     //chama o metodo que é responsavel pela sintetização
  126.                     startVoiceRecognitionActivity();
  127.                    
  128.                    
  129.                 }
  130.             });
  131.          
  132.            }catch (Exception e) {
  133.                 // TODO: handle exception
  134.            }
  135.          
  136.          
  137.            try{
  138.                 //Evento para Enviar o dado via BT pelo edit (Sem Sintetizador)
  139.                   edit.setOnLongClickListener(new View.OnLongClickListener() {
  140.                         public boolean onLongClick(View v) {
  141.                            
  142.                                 //Captura o Conteudo do edit
  143.                                 String enviaDadoEdit = edit.getText().toString();
  144.                                
  145.                                 //envia para o metodo de validação antes de enviar para o proximo dispositivo
  146.                                 validaDados(enviaDadoEdit);
  147.                                 //envia o dado para o dispositivo Client
  148.                                 writeData(dadoEnviarSintetizador);
  149.        
  150.                            
  151.                             return true;
  152.                         }
  153.                     });
  154.                 }catch (Exception e) {
  155.                     // TODO: handle exception
  156.                 }
  157.  
  158.        
  159.     }
  160.  
  161.    
  162.     //Metodos para input de Voz
  163.     //*************************************************
  164.     /**
  165.      * Fire an intent to start the speech recognition activity.
  166.      */
  167.     private void startVoiceRecognitionActivity() {
  168.         try{
  169.         Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
  170.         intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
  171.                 RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
  172.         intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
  173.         startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
  174.        
  175.         }catch (Exception e) {
  176.             Toast.makeText(getApplicationContext(), "Bluetooth Desativado ou não Pareado!",
  177.                     Toast.LENGTH_SHORT).show();
  178.         }
  179.     }
  180.  
  181.     /**
  182.      * Handle the results from the recognition activity.
  183.      */
  184.     @Override
  185.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  186.         if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
  187.             // Fill the list view with the strings the recognizer thought it could have heard
  188.             ArrayList<String> matches = data.getStringArrayListExtra(
  189.                     RecognizerIntent.EXTRA_RESULTS);
  190.            
  191.             dadoEnviarSintetizador =" ";
  192.            
  193.          
  194.             //verifica String Salva no Sintezador de Voz
  195.            for(int index =0; index < matches.size(); index++){
  196.  
  197.               if(!dadoEnviarSintetizador.equalsIgnoreCase("1") && !dadoEnviarSintetizador.equalsIgnoreCase("0")
  198.                       && !dadoEnviarSintetizador.equalsIgnoreCase("3")  && !dadoEnviarSintetizador.equalsIgnoreCase("4")
  199.                       && !dadoEnviarSintetizador.equalsIgnoreCase("5")){
  200.                
  201.                 edit.setText(matches.get(index).toString());
  202.                   validaDados(matches.get(index).toString());
  203.                  
  204.                
  205.               }
  206.            
  207.          
  208.  
  209.            }
  210.         }
  211.  
  212.         super.onActivityResult(requestCode, resultCode, data);
  213.        
  214.         writeData(dadoEnviarSintetizador);
  215.      
  216.    
  217.    
  218.     }
  219.    
  220.   //Metodos para input de Voz
  221.     //*************************************************
  222.    
  223.    
  224.    
  225.    
  226.    
  227.     //trata os dado para posteriormente enviar para o dispositivo (arduino)
  228.     //o arduino le os dados byte por byte, a maneira mais viavel é tratalo e enviar apenas 1 carater
  229.     public void validaDados(String dadoBruto){
  230.        
  231.         //se a frase falada ou digitada, for algumas dessas abaixo, é gravado a condição na variavel envia
  232.         // dadoEnviarSintetizador que posteriormente é enviado para o arduino
  233.        
  234.         if(dadoBruto.equalsIgnoreCase("Ligar") || dadoBruto.equalsIgnoreCase("Ativar") || dadoBruto.equalsIgnoreCase("Acender")){
  235.            dadoEnviarSintetizador ="1";
  236.  
  237.      
  238.        }else if(dadoBruto.equalsIgnoreCase("Desligar")|| dadoBruto.equalsIgnoreCase("Desativar") || dadoBruto.equalsIgnoreCase("Apagar")){
  239.            dadoEnviarSintetizador ="0";
  240.          
  241.        }else if(dadoBruto.equalsIgnoreCase("Mario")|| dadoBruto.equalsIgnoreCase("Mario Bross")|| dadoBruto.equalsIgnoreCase("Mario Bros")){
  242.          
  243.            dadoEnviarSintetizador ="3";
  244.      
  245.        }else if(dadoBruto.equalsIgnoreCase("Piratas do Caribe")|| dadoBruto.equalsIgnoreCase("Piratas do Karibe")|| dadoBruto.equalsIgnoreCase("Piratas") || dadoBruto.equalsIgnoreCase("Medo do Escuro")){
  246.          
  247.            dadoEnviarSintetizador ="5";
  248.        }else {
  249.            dadoEnviarSintetizador ="";
  250.        }
  251.        
  252.     }
  253.    
  254.    
  255.  
  256.    
  257.     //metodo do Listenner do botao de conexao bluetooth
  258.     @Override
  259.     public void onClick(View control) {
  260.  
  261.             switch (control.getId()) {
  262.             case R.id.botaoConectar:
  263.                     try{
  264.                      conetado = Connect();
  265.                    
  266.                      if(conetado){
  267.                          botaoConectar.setEnabled(false);
  268.                          botaoSintetizador.setEnabled(true);
  269.                          edit.setEnabled(true);
  270.                      }else{
  271.                          
  272.                          botaoConectar.setEnabled(true);
  273.                          botaoSintetizador.setEnabled(false);
  274.                          edit.setEnabled(true);
  275.                      }
  276.                     }catch(Exception ex){
  277.                        
  278.                     }
  279.                     break;
  280.             }
  281.     }
  282.    
  283.    
  284.     //Metodos para Conexao Bluetooth----------------------------------------
  285.     //*************************************************
  286.  
  287.     //checa se o BT esta ligado
  288.     private void CheckBt() {
  289.         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
  290.        
  291.  
  292.         if (!mBluetoothAdapter.isEnabled()) {
  293.                 Toast.makeText(getApplicationContext(), "Bluetooth Desativado !",
  294.                                 Toast.LENGTH_SHORT).show();
  295.                 mBluetoothAdapter.enable();
  296.         }
  297.  
  298.         if (mBluetoothAdapter == null) {
  299.                 Toast.makeText(getApplicationContext(),
  300.                                 "Bluetooth null !", Toast.LENGTH_SHORT)
  301.                                 .show();
  302.         }
  303. }
  304.         //metodo de conexão
  305.         public boolean Connect() {
  306.              try{
  307.                 Log.d(TAG, address);
  308.                 //pega o adress do bluetooth para iniciar a pariedade
  309.                 BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
  310.                
  311.                 Log.d(TAG, "Connecting to ... " + device);
  312.                
  313.                 //cancela a busca apos armazenar no BluetoothDevice
  314.                 mBluetoothAdapter.cancelDiscovery();
  315.                 try {
  316.                         //envia para o Socket a ID do dispositivo local
  317.                         btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
  318.                         //requisita a conexão
  319.                         btSocket.connect();
  320.                        
  321.                         Log.d(TAG, "Conexão Realizada!.");
  322.                        
  323.                         //chama o metodo que inicia a transferencia dos dados
  324.                         beginListenForData();
  325.                
  326.                 } catch (IOException e) {
  327.                         try {
  328.                                 //fecha o socket caso ocorra algum erro
  329.                                 btSocket.close();
  330.                                 return false;
  331.                         } catch (IOException e2) {
  332.                                 Log.d(TAG, "Unable to end the connection");
  333.                                 return false;
  334.                         }
  335.                        
  336.                  
  337.                 }
  338.                 return true;
  339.                
  340.              }catch (Exception e) {
  341.                  return false;
  342.             }
  343.                
  344.            
  345.          
  346.         }
  347.        
  348.        
  349. //metodo para escreve no BT
  350. private void writeData(String data) {
  351.         try {
  352.                 outStream = btSocket.getOutputStream();
  353.         } catch (IOException e) {
  354.                 Log.d(TAG, "Bug BEFORE Sending stuff", e);
  355.         }
  356.  
  357.  
  358.  
  359.  
  360.         try {
  361.            
  362.                 String message = data;
  363.                 byte[] msgBuffer = message.getBytes();
  364.                 outStream.write(msgBuffer);
  365.         } catch (IOException e) {
  366.                 Log.d(TAG, "Bug while sending stuff", e);
  367.         }
  368. }
  369.  
  370. @Override
  371.  
  372. //encerra a conexao apos o envio dos dados
  373. //(Não é necessario) mais é padrao do Android
  374. protected void onDestroy() {
  375.     super.onDestroy();
  376.  
  377.             try {
  378.                     btSocket.close();
  379.             } catch (IOException e) {
  380.             }
  381. }
  382.  
  383.  
  384. // inicia a transferencia dos dados
  385. public void beginListenForData()   {
  386.          try {
  387.                         inStream = btSocket.getInputStream();
  388.                 } catch (IOException e) {
  389.                 }
  390.        
  391.         Thread workerThread = new Thread(new Runnable()
  392.         {
  393.             public void run()
  394.             {              
  395.                while(!Thread.currentThread().isInterrupted() && !stopWorker)
  396.                {
  397.                     try
  398.                     {
  399.                         int bytesAvailable = inStream.available();                      
  400.                         if(bytesAvailable > 0)
  401.                         {
  402.                             byte[] packetBytes = new byte[bytesAvailable];
  403.                             inStream.read(packetBytes);
  404.                             for(int i=0;i<bytesAvailable;i++)
  405.                             {
  406.                                 byte b = packetBytes[i];
  407.                                 if(b == delimiter)
  408.                                 {
  409.                                     byte[] encodedBytes = new byte[readBufferPosition];
  410.                                     System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
  411.                                     final String data = new String(encodedBytes, "US-ASCII");
  412.                                     readBufferPosition = 0;
  413.                                     handler.post(new Runnable()
  414.                                     {
  415.                                         public void run()
  416.                                         {
  417.  
  418.                                              
  419.                                         }
  420.                                     });
  421.                                 }
  422.                                 else
  423.                                 {
  424.                                     readBuffer[readBufferPosition++] = b;
  425.                                 }
  426.                             }
  427.                         }
  428.                     }
  429.                     catch (IOException ex)
  430.                     {
  431.                         stopWorker = true;
  432.                     }
  433.                }
  434.             }
  435.         });
  436.  
  437.     }
  438. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement