Dúvida ao Enviar Arquivo .txt via bluetooh em Android

4 respostas
J
Eu gostaria de saber se essa é a maneira correta de enviar um arquivo .txt do meu sdCarde para o meu servidor via Bluetooth. Segue os código da parte do Cliente e a parte do Servidor. Cliente:
public class ClienteActivity extends Activity {
   
	private EditText mensagem;
	 
    /**
     * Botão de Envio
     */
    private Button enviar;
 
    /**
     * Socket de Conexão
     */
    private BluetoothSocket socket;
 
    /**
     * Fluxo de Entrada de Dados
     */
    private InputStream input;
 
    /**
     * Fluxo de Saída de Dados
     */
    private OutputStream output;
 
    /**
     * Manipulador de Mensagens
     */
    private final Handler h = new Handler() {
        public void handleMessage(Message msg) { // Manipular Mensagem
            String content = (String) msg.obj; // Captura do Conteúdo da Mensagem
            Toast.makeText(getApplication(), content, Toast.LENGTH_SHORT).show();
        }
    };
 
    /**
     * Envia Mensagens entre Fluxos de Execução
     * @param message Mensagem para Envio
     */
    public void alert(String message) {
        Message m = h.obtainMessage();
        m.obj = message;
        h.sendMessage(m);
    }
  
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // Cliente de Conexão Bluetooth
        // Caixa de Texto
        mensagem = (EditText) findViewById(R.id.mensagem);
        // Botão de Envio
        enviar = (Button) findViewById(R.id.enviar);
        enviar.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
            	
            	
            	
            	
            	
            	final String conteudo = mensagem.getText().toString();
                  // Transferidor de Dados
                  Thread sender = new Thread(){
                      public void run() {
                          // Conteúdo para Envio
                          byte content[] = conteudo.getBytes();
                          try { // Possibilidade de Erro
                        	  
                        	//File sdcard = Environment.getExternalStorageDirectory().getPath()+"/DigiCerto/";
							File file = new File(Environment
									.getExternalStorageDirectory().getPath()
									+ "/App/", "arquivo.txt");
							FileInputStream in = new FileInputStream(file);
							// Get the text file
							// File file = new File(sdcard,"producao.txt");
							// Read text from file
							output  = socket.getOutputStream();
							OutputStreamWriter osw = new OutputStreamWriter(output);
							BufferedWriter writer = new BufferedWriter(osw);
							writer.write(file.getName() + "\n");
							writer.flush();
							int tamanho = 4096; // buffer de 4KB    
			                byte[] buffer = new byte[tamanho];    
			                int lidos = -1;    
			                while ((lidos = in.read(buffer, 0, tamanho)) != -1) {    
			                    System.out.println(lidos);  
			                    output.write(buffer, 0, lidos);    
			                }    
			                output.flush();   
                    
                        	  
                            //output.write(content.length); // Tamanho do Conteúdo
                            //output.write(content); // Conteúdo Propriamente Dito
                              // Aviso de Sucesso ao Usuário
                              alert("Texto Enviado");
                          } catch (IOException e) { // Erro Encontrado
                              // Aviso de Erro ao Usuário
                              alert("Erro na Transferência");
                          }
                      }
                  };
                  // Executando o Fluxo de Processamento
                  sender.start(); // Inicialização
              }           
        });
        // Requisição do Adaptador
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
        if (adapter == null) { // Não há Bluetooth
            // Mensagem de Erro ao Usuário
            alert("Adaptador não Encontrado");
            finish();
        }
        if (!adapter.isEnabled()) { // Bluetooth Habilitado?
            // Mensagem de Erro ao Usuário
            alert("Bluetooth Desabilitado");
            finish();
        }
        // Dispositivos Pareados
        Set<BluetoothDevice> devices = adapter.getBondedDevices();
        // Servidor Bluetooth
        BluetoothDevice server = null;
        String servername = "ANALISTA"; // Nome do Servidor
        // Pesquisa do Servidor Pareado
        for (BluetoothDevice device : devices) { // Laço de Busca
            if (servername.equals(device.getName())) { // Nomes Idênticos?
                server = device; // Dispositivo Encontrado e Selecionado
            }
        }
        // Dispositivo Encontrado?
        if (server == null) {
            // Mensagem de Erro ao Usuário
            alert("Servidor não Pareado");
            finish();
        }
        // Servidor Bluetooth
        final BluetoothDevice computer = server;
        // Abrindo a Conexão
        Thread connector = new Thread(){
            public void run() {
                // Identificador Único do Servidor
                UUID ident = UUID.fromString("4219a890-1ec3-11e2-81c1-0800200c9a66");
                try {
                    // Socket de Conexão
                    BluetoothSocket s =
                        // Conexão a Partir do Identificador Único
                        computer.createRfcommSocketToServiceRecord(ident);
                    // Conectar ao Servidor
                    s.connect(); // Execução Bloqueante
                    // Fluxos de Entrada e Saída de Dados
                    InputStream in = s.getInputStream();
                    OutputStream out = s.getOutputStream();
                    // Captura de Objetos
                    socket = s; // Socket de Conexão
                    input  = in; // Fluxo de Entrada de Dados
                    output = out; // Fluxo de Saída de Dados
                    // Informar sobre Conexão
                    alert("Conexão Aberta");
                } catch (IOException e) { // Erro de Entrada e Saída de Dados
                    // Mensagem de Erro ao Usuário
                    alert("Erro de Conexão");
                    finish();
                }
            }
        };
        // Executando o Fluxo de Processamento
        connector.start(); // Inicialização
    }
 
    public void onDestroy() {
        super.onDestroy(); // Método Sobrescrito
        if (socket != null) { // Socket Configurado?
            try {
                socket.close(); // Fecha Conexão
            } catch (IOException e) { // Erro Encontrado?
                // Mensagem de Erro ao Usuário
                alert("Erro ao Fechar Socket");
            }
        }
    }
E agora a parte do servidor para receber o arquivo:
public class Server implements Runnable{

	@Override
	public void run() {
		String uuid = "4219a890-1ec3-11e2-81c1-0800200c9a66";
		 // Endereço para Conexão
	    String address = "btspp://localhost:" + uuid.replace("-", "");
	    
	    
        try {
            // Abertura de Conexão
            StreamConnectionNotifier notifier =
                (StreamConnectionNotifier) Connector.open(address);
            // Fluxo de Conexão
            StreamConnection stream = notifier.acceptAndOpen();
            // Captura de Fluxos
            InputStream input = stream.openInputStream();
            OutputStream output = stream.openOutputStream();
            // Laço de Repetição
            int size; byte content[]; // Auxiliares de Leitura
            String message = ""; // Mensagem Enviada pelo Cliente
           // while (!message.equals("SAIR")) {
                // Tamanho dos Dados
                //size = input.read(); // Quantidade de Bytes
                // Buffer de Leitura
               // content = new byte[size];
                // Preenchimento dos Dados
               // input.read(content); // Entrada de Informação                
                // Transformação da Mensagem Enviada
              //  message = new String(content); // Novo Elemento

               // // Exibição na Saída Padrão
              //  System.out.println(message);
              //  WriteFile(content.toString());
           // }
            
            
            
            InputStream in = stream.openInputStream();
            InputStreamReader isr = new InputStreamReader(in);  
            BufferedReader reader = new BufferedReader(isr);  
            String fName = reader.readLine();  
               System.out.println(fName);  
                  File f1 = new File("D:/" + fName);  
                  FileOutputStream out = new FileOutputStream(f1);               
               int tamanho = 4096; // buffer de 4KB    
               byte[] buffer = new byte[tamanho];    
               int lidos = -1;    
               while ((lidos = in.read(buffer, 0, tamanho)) != -1) {    
                   out.write(buffer, 0, lidos);    
               }    
            
           
	    }catch (IOException e) {
			e.printStackTrace();
		}
	    catch (Exception e) {
			e.printStackTrace();
		}
		
	}
Espero que possam me ajudar, minha dúvida é so como enviar o arquivo mesmo. Obrigado. Que está nesse trecho da parte do cliente:
File file = new File(Environment.getExternalStorageDirectory().getPath()
									+ "/App/", "producao.txt");
							FileInputStream in = new FileInputStream(file);
							
							output  = socket.getOutputStream();
							OutputStreamWriter osw = new OutputStreamWriter(output);
							BufferedWriter writer = new BufferedWriter(osw);
							writer.write(file.getName() + "\n");
							writer.flush();
							int tamanho = 4096; // buffer de 4KB    
			                byte[] buffer = new byte[tamanho];    
			                int lidos = -1;    
			                while ((lidos = in.read(buffer, 0, tamanho)) != -1) {    
			                    System.out.println(lidos);  
			                    output.write(buffer, 0, lidos);    
			                }    
			                output.flush();
Obrigado desde já.

4 Respostas

F

Não entendi a pergunta. Você realizou alguma tentativa?

J

Sim mais da erro na linha.
InputStream in = stream.openInputStream();
E não chega nenhuma mensagem.
Obrigado pela a resposta

F

joserodrigues:
Sim mais da erro na linha.
InputStream in = stream.openInputStream();
E não chega nenhuma mensagem.
Obrigado pela a resposta

Quando for assim, posta o log de erro. Assim fica mais fácil a identificação do problema.

J

Eu consegui mandar os dados e ler no server.
Agora só não estou conseguindo criar o arquivo em um diretório meu.
Segue o código do lado servidor para ler o que foi mandado do Cliente Android via Bluetooth:

File f1 = new File("D:\\Producao.txt");    
            FileOutputStream out = new FileOutputStream(f1);          
            
            String texto = null;  
            byte[] buffer = new byte[4096];  
            int lidos = -1;  
            while ((lidos = input.read(buffer, 0, buffer.length)) != -1) {  
                texto = new String(buffer, 0, lidos);  
                System.out.print(texto);  
                out.write(buffer, 0, lidos); 
            }

Ele mostra os dados do arquivo que está no device através do System.out.print(texto); , mas não cria o arquivo no meu diretorio D:\
pode me ajudar.
Desde já obrigado

Criado 30 de outubro de 2012
Ultima resposta 31 de out. de 2012
Respostas 4
Participantes 2