Ciao amici, Sto provando a inviare un file dal dispositivo Android a un dispositivo Bluetooth specifico utilizzando l'API di terze parti chiamata bluecove con obex. Riesco a connettere il dispositivo quando l'intestazione di connessione è impostata su un problema con la connessione peer ripristinata.Reset connessione peer Bluetooth
Qui il mio snippet di codice seguente. qualsiasi aiuto su questo apprezzato.
Nella mia attività che sto usando qui di seguito il codice per elaborare inviare il file
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();
================ di sotto di quello che sto cercando di collegamento colleghi Bluecove oggetto di classe con l'intestazione impostata come segue.
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();
}
}
Durante l'esecuzione del codice di cui sopra ho ottenuto collegamento accetta dialogo notifica sul dispositivo di destinazione e poi notificato che il riposo connessione peer in linea durante l'esecuzione * cs.connect (hs); nel mio logcat. Logcat dello stack trace:
07-11 14: 48: 07,044: W/System.err (4527): java.io.IOException: azzeramento Connection by peer 07-11 14: 48: 07,052: W /System.err(4527): a android.bluetooth.BluetoothSocket.readNative (metodo nativo) 07-11 14: 48: 07.059: W/System.err (4527): a android.bluetooth.BluetoothSocket.read (BluetoothSocket.java:336) 07-11 14: 48: 07.059: W/System.err (4527): a android.bluetooth.BluetoothInputStream.read (BluetoothInputStream.java:96) 07-11 14: 48: 07.059 : W/System.err (4527): a com.intel.bluetooth.BluetoothStackAndroid.connectionR fRead (BluetoothStackAndroid.java:437) 07-11 14: 48: 07.059: W/System.err (4527): a com.intel.bluetooth.BluetoothRFCommInputStream.read (BluetoothRFCommInputStream.java:139) 07-11 14 : 48: 07.059: W/System.err (4527): a 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): a com.intel.bluetooth. obex.OBEXClientSessionImpl.connectImpl (OBEXClientSessionImpl.java:100) 07-11 14: 48: 07.059: W/System.err (4527): a com.intel.bluetooth.obex.OBEXClientSessionImpl.connect (OBEXClientSessionImpl.java:85) 07-11 14: 48: 07.059: W/System.err (4527): a com.example.bluecovesample.SendFileTask.run (SendFileTask.java:78) 07-11 14: 48: 07.059: W/System .err (4527): a java.lang.Thread.run (Thread.java:1019)
... riesco a connettermi ma quando raggiungo cs.connect (hs); provando a impostare l'headerset per il dispositivo connesso per inviare il file, viene disconnesso.anche un'altra soluzione per questo. –
Hai le autorizzazioni READ_EXTERNAL_STORAGE e BLUETOOTH nel tuo manifest? – Erol
Se sì, dai un'occhiata ai codici sorgente qui: http://gitorious.org/android-obex e confronta il tuo codice. – Erol