こんにちは、友人、 私は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)
...私は接続することができますが、私はcs.connect(hs)に到達します。接続されたデバイスがファイルを送信するためのヘッダーセットを設定しようとすると、接続が切断されます。 –
マニフェストにREAD_EXTERNAL_STORAGEおよびBLUETOOTH権限がありますか? – Erol
はいの場合は、http://gitorious.org/android-obexのソースコードを見て、コードを比較してください。 – Erol