蓝牙对等连接重置

您好朋友,我试图通过使用第三方API称为bluecove与obex从Android设备发送到特定的蓝牙设备的文件。 我可以连接设备连接头设置时,我正面临一个问题, 对等连接重置。

在这里我的下面的代码片段。 任何帮助,赞赏。

在我的活动中,我使用下面的代码来处理发送文件

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

================下面,我想连接bluecove连接类对象与标头设置如下。

 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)时通知对等连接rest。 在我的logcat。 Logcat堆栈跟踪:

07-11 14:48:07.044:W / System.err(4527):java.io.IOException:连接重置由对等07-11 14:48:07.052:W / System.err(4527):在android.bluetooth .BluetoothSocket.readNative(Native Method)07-11 14:48:07.059:W / System.err(4527):at 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):at com.intel.bluetooth.BluetoothStackAndroid .connectionRfRead(BluetoothStackAndroid.java:437)07-11 14:48:07.059:W / System.err(4527):at com.intel.bluetooth.BluetoothRFCommInputStream.read(BluetoothRFCommInputStream.java:139)07-11 14:48 :07.059:W / System.err(4527):at com.intel.bluetooth.obex.OBEXUtils.readFully(OBEXUtils.java:71)07-11 14:48:07.059:W / System.err(4527):at com.intel.bluetooth.obex.OBEXSessionBase.readPacket(OBEXSessionBase.java:217)07-11 14:48:07.059:W / System.err(4527):at com.intel.bluetooth.obex.OBEXClientSessionImpl.co nnectImpl(OBEXClientSessionImpl.java:100)07-11 14:48:07.059:W / System.err(4527):at com.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85)07-11 14: W:System.err(4527):at com.example.bluecovesample.SendFileTask.run(SendFileTask.java:78)07-11 14:48:07.059:W / System.err(4527):at java .lang.Thread.run(Thread.java:1019)

Solutions Collecting From Web of "蓝牙对等连接重置"

出于某种原因,客户正在切断连接。 这可能是由于几个原因,如发送错误的数据或错误的配对。 你确定你正确配对设备?

配对码没有被input可能是一个问题。 这使配对不当。

修复方法是进入设置 – >无线和networking – >蓝牙设置,长按“配对”设备,select“取消配对”,然后单击button,在设备上产生一个带有文本框的“蓝牙配对请求”窗口。我input了PIN码(配对码)。 完成之后,配对将会成功。

您也可以使用一个名为Wireshark的程序来分析通过协议发送的消息。

 import javax.obex.ClientSession; 

你使用这个类“ClientSession”。

据我所知,createHeaderSet不是ClientSession的一个方法

我想知道如何成功地编译你的应用程序。