2012-07-11 52 views
8

Xin chào bạn, Tôi đang cố gắng gửi một tập tin từ thiết bị Android đến thiết bị bluetooth cụ thể bằng cách sử dụng api của bên thứ ba có tên là bluecove với obex. Tôi có thể kết nối thiết bị khi thiết lập tiêu đề kết nối Tôi đang gặp phải sự cố khi đặt lại kết nối ngang hàng ngang hàng.Bluetooth peer connection reset

Đây là đoạn mã dưới đây của tôi. bất kỳ giúp đỡ về điều này đánh giá cao.

Trong hoạt động của tôi Tôi đang sử dụng bên dưới mã để xử lý gửi tập tin

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

================ dưới đây mà tôi đang cố gắng để kết nối kết nối bluecove lớp đối tượng với tiêu đề thiết lập như sau.

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

} 

Khi thực thi mã trên, tôi nhận được hộp thoại thông báo chấp nhận kết nối trên thiết bị đích và sau đó thông báo kết nối ngang hàng trong khi thực hiện dòng * cs.connect (hs); trong logcat của tôi. Logcat stack trace:

07-11 14: 48: 07,044: W/System.err (4527): java.io.IOException: reset kết nối bởi peer 07-11 14: 48: 07,052: W /System.err(4527): tại android.bluetooth.BluetoothSocket.readNative (Phương thức gốc) 07-11 14: 48: 07.059: W/System.err (4527): tại android.bluetooth.BluetoothSocket.read (BluetoothSocket.java:336) 07-11 14: 48: 07.059: W/System.err (4527): tại android.bluetooth.BluetoothInputStream.read (BluetoothInputStream.java:96) 07-11 14: 48: 07.059 : W/System.err (4527): tại com.intel.bluetooth.BluetoothStackAndroid.connectionR fRead (BluetoothStackAndroid.java:437) 07-11 14: 48: 07.059: W/System.err (4527): tại com.intel.bluetooth.BluetoothRFCommInputStream.read (BluetoothRFCommInputStream.java:139) 07-11 14 : 48: 07.059: W/System.err (4527): tại com.intel.bluetooth.obex.OBEXUtils.readFully (OBEXUtils.java:71) 07-11 14: 48: 07.059: W/System.err (4527): tại com.intel.bluetooth.obex.OBEXSessionBase.readPacket (OBEXSessionBase.java:217) 07-11 14: 48: 07.059: W/System.err (4527): tại com.intel.bluetooth. obex.OBEXClientSessionImpl.connectImpl (OBEXClientSessionImpl.java:100) 07-11 14: 48: 07.059: W/System.err (4527): tại com.intel.bluetooth.obex.OBEXClientSessionImpl.connect (OBEXClientSessionImpl.java:85) 07-11 14: 48: 07.059: W/System.err (4527): tại com.example.bluecovesample.SendFileTask.run (SendFileTask.java:78) 07-11 14: 48: 07.059: W/System .err (4527): tại java.lang.Thread.run (Thread.java:1019)

Trả lời

3

Vì một số lý do, khách hàng đang cắt kết nối. Điều này có thể do một số lý do như gửi dữ liệu sai hoặc ghép nối sai. Bạn có chắc chắn rằng bạn đang ghép nối đúng thiết bị không?

Mã ghép nối không được nhập có thể là vấn đề. Điều này làm cho việc ghép nối không đúng.

Khắc phục là nhập Cài đặt -> Mạng không dây & -> Cài đặt Bluetooth, nhấn và giữ trên thiết bị "ghép nối" và chọn 'Bỏ ghép nối', sau đó nhấn một lần trên thiết bị đã tạo ra cửa sổ 'Yêu cầu ghép đôi Bluetooth' textfield, mà tôi đã nhập mã PIN (mã ghép nối). Sau khi điều này được thực hiện, ghép nối sẽ thành công.

Bạn cũng có thể sử dụng chương trình có tên Wireshark để phân tích thư gửi qua giao thức.

+0

... tôi có thể kết nối nhưng khi tôi truy cập cs.connect (hs); cố gắng thiết lập headerset cho thiết bị kết nối để gửi tập tin, nó bị ngắt kết nối.hơn khác solutin cho việc này. –

+0

Bạn có quyền READ_EXTERNAL_STORAGE và BLUETOOTH trong tệp kê khai của mình không? – Erol

+1

Nếu có, hãy xem mã nguồn tại đây: http://gitorious.org/android-obex và so sánh mã của bạn. – Erol

0
import javax.obex.ClientSession; 

bạn sử dụng lớp này "ClientSession".

như xa như tôi biết, createHeaderSet không phải là một phương pháp ClientSession

Tôi tự hỏi làm thế nào bạn biên dịch ứng dụng của bạn thành công.

Các vấn đề liên quan