こんにちは友人、私は閂でbluecoveと呼ばれるサードパーティのAPIを使用してAndroidデバイスから特定のBluetoothデバイスにファイルを送信しようとしています。接続ヘッダーが設定されているときにデバイスを接続できますピア接続がリセットされるという問題に直面しています。
ここに私の以下のコードスニペットがあります。これに関するどんな助けもありがたいです。
私のアクティビティでは、送信ファイルを処理するために以下のコードを使用しています
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)の実行中にピア接続が停止していることを通知されました。私の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(ネイティブメソッド)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 .connectionRfRead(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)07- 11 14:48:07.059:W / System.err(4527):com.example.bluecovesample.SendFileTask.run(SendFileTask.java:78)07-11 14:48:07.059:W / System.err(4527) :java.lang.Thread.run(Thread.java:1019)でcom.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85)07-11 14:48:07.059:W / System.err(4527):com.example.bluecovesample.SendFileTask.run(SendFileTask。 java:78)07-11 14:48:07.059:W / System.err(4527):java.lang.Thread.run(Thread.java:1019)com.intel.bluetooth.obex.OBEXClientSessionImpl.connect(OBEXClientSessionImpl.java:85)07-11 14:48:07.059:W / System.err(4527):com.example.bluecovesample.SendFileTask.run(SendFileTask。 java:78)07-11 14:48:07.059:W / System.err(4527):java.lang.Thread.run(Thread.java:1019)