Bonsoir à toutes et à tous,

J'ai une classe (voir ci-après) qui me permet de créer une liaison bluetooth avec un GPS.

Je me connecte socket.connect();sans problème au GPS ; je m'en déconnecte socket.close(); aussi sans problème.

Mais lorsque je veux me reconnecter, cela ne fonctionne pas et j'ai une exception qui me dit "socket closed". Ben oui, puisque je l'avais fermé !

Que faut-il faire pour ré-ouvrir cette connexion ? (je sais que c'est possible car j'ai une application, dont je n'ai pas le code, mais qui réalise cette fonction.)

Merci de votre aide.

Pierre

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package com.example.bluetotth_spp;
 
import java.io.IOException;
import java.io.InputStream;
import java.util.Set;
import java.util.UUID;
 
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
 
public class BtInterface {
 
	private BluetoothDevice gpsExt = null;
	private BluetoothSocket socket = null;
	private InputStream receiveStream = null;
	private ReceiverThread receiverThread;
	Handler handlerM;
 
	public BtInterface(Handler hstatus, Handler hT) {
		Set<BluetoothDevice> setpairedDevices = BluetoothAdapter.getDefaultAdapter().getBondedDevices();
		BluetoothDevice[] pairedDevices = (BluetoothDevice[]) setpairedDevices.toArray(new BluetoothDevice[setpairedDevices.size()]);
		for(int i = 0; i < pairedDevices.length; i++) {
			if(pairedDevices[i].getName().contains("BT-GPS-393A04")) {
				gpsExt = pairedDevices[i];
				try {
					socket = gpsExt.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
					receiveStream = socket.getInputStream();
				} catch (IOException e) {
					e.printStackTrace();
				}
				break;
			}
		}
		handlerM = hstatus;
		receiverThread = new ReceiverThread(hT);
	}
 
	public void connect() {
		new Thread() {
			@Override public void run() {
				try {
					socket.connect();
					Message msg = handlerM.obtainMessage();
					msg.arg1 = 1;
					handlerM.sendMessage(msg);
					receiverThread.start();
				} catch (IOException e) {
					Log.v("N", "Connection Failed : "+e.getMessage());
					e.printStackTrace();
				}
			}
		}.start();
	}
 
	public void close() {
		try {
			socket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
 
/*	public BluetoothDevice getDevice() {
		return gpsExt;
	}*/
 
	private class ReceiverThread extends Thread {
		Handler handlerR;
		ReceiverThread(Handler hRT) {
			handlerR = hRT;
		}
		@Override public void run() {
			while(true) {
				try {
					if(receiveStream.available() > 0) {
						byte buffer[] = new byte[100];
						int k = receiveStream.read(buffer, 0, 100);
						if(k > 0) {
							byte rawdata[] = new byte[k];
							for(int i = 0; i < k; i++)
								rawdata[i] = buffer[i];
							String data = new String(rawdata);
							Message msg = handlerR.obtainMessage();
							Bundle b = new Bundle();
							b.putString("receivedData", data);
							msg.setData(b);
							handlerR.sendMessage(msg);
						}
					}
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}