2012-07-11 16 views
8

こんにちは、友人、 私はobexとbluecoveと呼ばれるサードパーティのAPIを使用して、アンドロイドデバイスから特定のBluetoothデバイスにファイルを送信しようとしています。接続ヘッダーが設定されているときにデバイスを接続することができます。ピア接続をリセットするという問題が発生しています。Bluetoothピア接続のリセット

ここに私のコードスニペットを示します。これについての助けに感謝します。私の活動で

は、私は私がbluecove接続を接続しようとしているその下のファイルに

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(); 

================を送信処理するためのコードの下に使用しています次のようにヘッダーを設定したクラスオブジェクト。私は、接続が宛先デバイスに通知ダイアログを受け入れる持って、上記のコードを実行している間

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(); 
    } 

} 

は、通知されたそのピア接続ライン*のcs.connect(HS)を実行中に残り、私のlogcatに。 Logcatスタックトレース:

7月11日14:48:07.044:java.io.IOExceptionの:ピア07-11によって 接続リセット14:48:07.052:(4527)をSystem.err/W W/System.err(4527): android.bluetooth.BluetoothSocket.readNative(ネイティブメソッド)07-11 14:48:07.059:W/System.err(4527): android.bluetooth.BluetoothSocket.read BluetoothSocket.java:336)07-11 14:48:07.059:W/System.err(4527): android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96) 07-11 14:48:07.059 :W/System.err(4527): com.intel.bluetooth.BluetoothStackAndroid.connectionR fRead(BluetoothStackAndroid.java:437) 07-11 14:48:07.059:W/System.err(4527): でcom.intel.bluetooth.BluetoothRFCommInputStream.read(BluetoothRFCommInputStream.java:139) 07-11 14 :48:07.059:W/System.err(4527): 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): com.intel.bluetooth。 obex.OBEXClientSessionImpl.connectImpl(OBEXClientSessionImpl.java:100) 07-11 14:48:07.059:W/System.err(4527): でcom.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85 )(SendFileTask.java:78) 07-11 14:48:07.059:W/System.err .ERR(4527): java.lang.Thread.run(Thread.java:1019)

答えて

3

に何らかの理由でクライアントが接続を切断されています。これは、誤ったデータの送信や不適切なペアリングなどのいくつかの理由が原因である可能性があります。デバイスを正しくペア設定していることを確認しましたか?

ペアリングコードが入力されていない可能性があります。これにより、ペアリングが正しく行われません。

「設定 - >ワイヤレス&ネットワーク - > Bluetooth設定」と入力し、「ペア設定済み」のデバイスを長押しして「ペアリング解除」を選択し、「Bluetoothペアリング要求」ウィンドウを生成したデバイスを1回押します。私がPIN(ペアリングコード)をタイプしたテキストフィールド。これが行われた後、ペアリングは成功します。

Wiresharkというプログラムを使用して、プロトコルを介して送信されるメッセージを分析することもできます。

+0

...私は接続することができますが、私はcs.connect(hs)に到達します。接続されたデバイスがファイルを送信するためのヘッダーセットを設定しようとすると、接続が切断されます。 –

+0

マニフェストにREAD_EXTERNAL_STORAGEおよびBLUETOOTH権限がありますか? – Erol

+1

はいの場合は、http://gitorious.org/android-obexのソースコードを見て、コードを比較してください。 – Erol

0
import javax.obex.ClientSession; 

このクラス「ClientSession」を使用します。

私の知る限り、createHeaderSetは、私はあなたが正常にアプリをコンパイルする方法を疑問に思うClientSessionを

の方法ではありません。

関連する問題