Envoyer des données à partir de android bluetooth pour PC avec bluecove
Je suis en train d'envoyer des données à partir de android (à l'aide de l'API de son SDK) à un PC à l'aide Bluecove sur windows, ce dernier le serveur.
Je peux obtenir le android de se connecter au serveur, mais quand j'écris à la prise du flux de sortie, rien ne se passe sur le serveur. J'ai le onPut méthode surchargée, mais il n'est jamais appelé.
Code suit ci-dessous, si quelqu'un pouvait m'aider je serais très apprécié :
Android
public class BluetoothWorker {
private static UUID generalUuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static BluetoothSocket socket;
private static BluetoothSocket getBluetoothSocket(){
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mBluetoothAdapter.cancelDiscovery();
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
//If there are paired devices
if (pairedDevices.size() > 0) {
//Loop through paired devices
for (BluetoothDevice device : pairedDevices) {
//Add the name and address to an array adapter to show in a ListView
if(device.getName().equalsIgnoreCase(("MIGUEL-PC"))){
try {
return device.createRfcommSocketToServiceRecord(generalUuid);
} catch (IOException e) {
return null;
}
}
}
}
return null;
}
public static boolean sendData(String status){
socket = getBluetoothSocket();
try {
socket.connect();
} catch (IOException e) {
//TODO Auto-generated catch block
socket = null;
}
if(socket != null){
try {
socket.getOutputStream().write(status.getBytes());
socket.getOutputStream().flush();
socket.close();
return true;
} catch (IOException e) {
socket = null;
return false;
}
}else{
return false;
}
}
}
PC code
public class AISHIntegrationBTBridge {
static final String serverUUID = "0000110100001000800000805F9B34FB";
public static void main(String[] args) throws IOException {
LocalDevice.getLocalDevice().setDiscoverable(DiscoveryAgent.GIAC);
SessionNotifier serverConnection = (SessionNotifier) Connector.open("btgoep://localhost:"
+ serverUUID + ";name=ObexExample");
int count = 0;
while(count < 2) {
RequestHandler handler = new RequestHandler();
serverConnection.acceptAndOpen(handler);
System.out.println("Received OBEX connection " + (++count));
}
}
private static class RequestHandler extends ServerRequestHandler {
public int onPut(Operation op) {
try {
HeaderSet hs = op.getReceivedHeaders();
String name = (String) hs.getHeader(HeaderSet.NAME);
if (name != null) {
System.out.println("put name:" + name);
}
InputStream is = op.openInputStream();
StringBuffer buf = new StringBuffer();
int data;
while ((data = is.read()) != -1) {
buf.append((char) data);
}
System.out.println("got:" + buf.toString());
op.close();
return ResponseCodes.OBEX_HTTP_OK;
} catch (IOException e) {
e.printStackTrace();
return ResponseCodes.OBEX_HTTP_UNAVAILABLE;
}
}
}
}
OriginalL'auteur Miguel Ribeiro | 2011-05-14
Vous devez vous connecter pour publier un commentaire.
J'ai fait chose de similaire il y a 2 ans.
Pour Android, mon code est légèrement différente de la vôtre:
J'ai utilisé
DataOutputStream
pour envoyer des données vers le PC. Mais assurément, ce n'est pas grave, juste pour votre référence.Pour PC,
Je ne suis pas sûr si les codes ci-dessus fonctionnent encore aujourd'hui, comme cela a été fait il y a 2 ans. Le BlueCove API peut avoir beaucoup changé. Mais de toute façon, ces codes fonctionnent pour moi. Espérons que cela peut vous aider.
Une autre remarque est que, j'ai dû désinstaller le Toshiba Pilote Bluetooth sur mon PC et réinstaller Microsoft dans le but de rendre l'utilisation de BlueCove. Sinon, ça ne marchera pas. (Cependant, la dernière version de BlueCove peut-être déjà prises en charge des pilotes différents, s'il vous plaît corrigez-moi si j'ai dit quelque chose de mal.)
OriginalL'auteur
Essayer avec "println" au lieu de "écrire" dans votre Android méthode sendData !
OriginalL'auteur