2012-07-11 17 views
8

Ciao amici, Sto provando a inviare un file dal dispositivo Android a un dispositivo Bluetooth specifico utilizzando l'API di terze parti chiamata bluecove con obex. Riesco a connettere il dispositivo quando l'intestazione di connessione è impostata su un problema con la connessione peer ripristinata.Reset connessione peer Bluetooth

Qui il mio snippet di codice seguente. qualsiasi aiuto su questo apprezzato.

Nella mia attività che sto usando qui di seguito il codice per elaborare inviare il file

BlueCoveImpl.setConfigObject(
       BlueCoveConfigProperties.PROPERTY_ANDROID_CONTEXT, 
       this); 
String deviceAddress = "0007ABB6D96E"; 
      int channel = 9; 
      String obexURL = "btgoep://" + deviceAddress + ":" 
        + "0000110600001000800000805f9b34fb" + ";android=true"; 

      // String obexURL = "btgoep://" + deviceAddress + ":" + channel 
      // + ";android=true"; 
      String fileToSend = "sdcard/DSCN9379.jpg"; 
      System.out.println("Connecting to " + obexURL); 
      FileInputStream stream = new FileInputStream(fileToSend); 
      File f = new File(fileToSend); 
      int size = (int) f.length(); 
      byte file[] = new byte[size]; 
      stream.read(file); 
      String filename = f.getName(); 
      System.out 
        .println("***************Now sending file to device*****************"); 
      SendFileTask task = new SendFileTask(MainActivity.this, obexURL, 
        file, filename); 
      Thread thread = new Thread(task); 
      thread.start(); 

================ di sotto di quello che sto cercando di collegamento colleghi Bluecove oggetto di classe con l'intestazione impostata come segue.

package com.example.bluecovesample; 

import java.io.OutputStream; 

import javax.microedition.io.Connection; 
import javax.microedition.io.Connector; 
import javax.obex.ClientSession; 
import javax.obex.HeaderSet; 
import javax.obex.Operation; 
import javax.obex.ResponseCodes; 

//import static write ; 
import android.content.Context; 
import android.widget.Toast; 

public class SendFileTask implements Runnable { 

    private byte[] file; 
    private String filename; 
    public static final int WRITE = 2; 

    String logString; 

    int responseCode; 
    Context context; 
    String obexURL; 

    public SendFileTask(Context ctx, String obexUrl, byte[] file, 
      String filename) { 
     this.context = ctx; 
     this.obexURL = obexUrl; 
     this.file = file; 
     this.filename = filename; 

    } 

    public void run() { 
     Connection connection = null; 
     try { 
      System.out.println(obexURL); 
      // for (int i = 0; i 3; i++) 
      { 
       // connection = Connector.open("btgoep://"+btConnectionURL+ 
       // ":6"); 
       connection = Connector.open(obexURL); 
      } 
      // connection obtained 

      // now, let's create a session and a headerset objects 
      ClientSession cs = (ClientSession) connection; 

      HeaderSet hs = cs.createHeaderSet(); 
      // toastMsg(hs.toString()); 
      // now let's send the connect header 
      // cs.notifyAll(); 

      **cs.connect(hs);** 

      hs.setHeader(HeaderSet.NAME, filename); 
      // System.out.println("sfname:"+filename); 
      int dotIndex = filename.lastIndexOf("."); 
      // System.out.println("doti:"+dotIndex); 
      String extension = filename.substring(dotIndex).toLowerCase(); 
      // System.out.println("sfname:"+extension); 

      if (extension.equals(".txt")) { 
       hs.setHeader(HeaderSet.TYPE, "text/plain"); 
      } else if (extension.equals(".jpg") || extension.equals(".jpeg")) { 
       hs.setHeader(HeaderSet.TYPE, "image/jpeg"); 
      } else if (extension.equals(".mpeg") || extension.equals(".mpg") 
        || extension.equals(".mp3")) { 
       hs.setHeader(HeaderSet.TYPE, "video/mpeg"); 
      } else if (extension.equals(".wav")) { 
       hs.setHeader(HeaderSet.TYPE, "audio/x-wav"); 
      } else if (extension.equals(".3gp")) { 
       hs.setHeader(HeaderSet.TYPE, "image/jpeg"); 
      } else if (extension.equals("mid") || extension.equals("rmi")) { 
       hs.setHeader(HeaderSet.TYPE, "audio/mid"); 
      } 

      hs.setHeader(HeaderSet.LENGTH, new Long(file.length)); 

      Operation putOperation = cs.put(hs); 

      // System.out.println("response code:"+putOperation.getResponseCode()); 

      // putOperation.getResponseCode(); 
      // this.responseCode = putOperation.getResponseCode(); 

      OutputStream outputStream = putOperation.openOutputStream(); 
      outputStream.write(file); 
      // file push complete 

      outputStream.close(); 
      responseCode = putOperation.getResponseCode(); 

      putOperation.close(); 

      cs.disconnect(null); 

      connection.close(); 

      // file successfully sent 

      System.out.println("RESPONSE CODE " + responseCode); 
      if (responseCode == ResponseCodes.OBEX_HTTP_OK) { 
       System.out.println("FILE SUCCESSFULLY SENT " + filename); 
      } 

      else { 
       System.out.println("FILE SUCCESSFULLY NOT SENT" + filename 
         + " not in exception"); 

      } 

     } catch (Exception e) { 

      System.out.println("FILE SUCCESSFULLY NOT SENT" + filename 
        + " in exception"); 
      // System.out.println("In exception"); 
      e.printStackTrace(); 

      try { 
       connection.close(); 
      } catch (Exception ex) { 
       System.out.println("error closing connection" + ex.toString()); 
      } 
     } 
    } 

    private void toastMsg(String msg) { 
     Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); 
    } 

} 

Durante l'esecuzione del codice di cui sopra ho ottenuto collegamento accetta dialogo notifica sul dispositivo di destinazione e poi notificato che il riposo connessione peer in linea durante l'esecuzione * cs.connect (hs); nel mio logcat. Logcat dello stack trace:

07-11 14: 48: 07,044: W/System.err (4527): java.io.IOException: azzeramento Connection by peer 07-11 14: 48: 07,052: W /System.err(4527): a android.bluetooth.BluetoothSocket.readNative (metodo nativo) 07-11 14: 48: 07.059: W/System.err (4527): a android.bluetooth.BluetoothSocket.read (BluetoothSocket.java:336) 07-11 14: 48: 07.059: W/System.err (4527): a android.bluetooth.BluetoothInputStream.read (BluetoothInputStream.java:96) 07-11 14: 48: 07.059 : W/System.err (4527): a com.intel.bluetooth.BluetoothStackAndroid.connectionR fRead (BluetoothStackAndroid.java:437) 07-11 14: 48: 07.059: W/System.err (4527): a com.intel.bluetooth.BluetoothRFCommInputStream.read (BluetoothRFCommInputStream.java:139) 07-11 14 : 48: 07.059: W/System.err (4527): a com.intel.bluetooth.obex.OBEXUtils.readFully (OBEXUtils.java:71) 07-11 14: 48: 07.059: W/System.err (4527): com.intel.bluetooth.obex.OBEXSessionBase.readPacket (OBEXSessionBase.java:217) 07-11 14: 48: 07.059: W/System.err (4527): a com.intel.bluetooth. obex.OBEXClientSessionImpl.connectImpl (OBEXClientSessionImpl.java:100) 07-11 14: 48: 07.059: W/System.err (4527): a com.intel.bluetooth.obex.OBEXClientSessionImpl.connect (OBEXClientSessionImpl.java:85) 07-11 14: 48: 07.059: W/System.err (4527): a com.example.bluecovesample.SendFileTask.run (SendFileTask.java:78) 07-11 14: 48: 07.059: W/System .err (4527): a java.lang.Thread.run (Thread.java:1019)

risposta

3

Per qualche ragione, il cliente sta tagliando la connessione. Ciò potrebbe essere dovuto a diversi motivi, come l'invio di dati errati o l'associazione errata. Ti sei assicurato di associare i dispositivi correttamente?

Il codice di associazione non inserito potrebbe essere un problema. Questo rende l'abbinamento improprio.

La correzione è accedere a Impostazioni -> Wireless reti & -> Impostazioni Bluetooth, premere a lungo sul dispositivo "accoppiato" e selezionare "Disaccoppia", quindi premere una volta sul dispositivo che ha prodotto una finestra "Richiesta accoppiamento Bluetooth" con campo di testo, in cui ho digitato il PIN (codice di accoppiamento). Dopo averlo fatto, l'accoppiamento avrà successo.

È anche possibile utilizzare un programma chiamato Wireshark per analizzare i messaggi inviati tramite il protocollo.

+0

... riesco a connettermi ma quando raggiungo cs.connect (hs); provando a impostare l'headerset per il dispositivo connesso per inviare il file, viene disconnesso.anche un'altra soluzione per questo. –

+0

Hai le autorizzazioni READ_EXTERNAL_STORAGE e BLUETOOTH nel tuo manifest? – Erol

+1

Se sì, dai un'occhiata ai codici sorgente qui: http://gitorious.org/android-obex e confronta il tuo codice. – Erol

0
import javax.obex.ClientSession; 

si utilizza questa classe "ClientSession".

per quanto ne so, createHeaderSet non è un metodo di ClientSession

Mi chiedo come si compila la tua applicazione con successo.

Problemi correlati