Je travaille actuellement sur une application Android qui se connecte à un instrument via Bluetooth et j'ai besoin d'écrire des commandes de chaîne et de recevoir des réponses de chaîne en retour. Actuellement, la connexion/lecture/écriture fonctionne pour TCP/IP sur Wi-Fi et j'essaie maintenant de mettre en œuvre Bluetooth. Mais je me heurte à des obstacles. J'ai fait des recherches sur le web pour essayer de trouver des exemples de quelque chose de similaire, mais je n'ai pas eu de chance. J'ai utilisé l'exemple de la ressource Android developer : Bluetooth Chat comme point de référence principal.
Mon code actuel semble fonctionner Ensuite, une exception de type "Service Discovery Failed" est levée au moment de la connexion. J'utilise le DeviceListActivity
pour découvrir et sélectionner l'appareil auquel je veux me connecter. Elle renvoie unActivityResult et ma classe Bluetooth attend qu'elle le traite pour s'y connecter. Le code ci-dessous est presque identique à celui de l'application de chat Bluetooth.
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(!m_BluetoothAdapter.isEnabled())
{
m_BluetoothAdapter.enable();
}
switch (requestCode) {
case REQUEST_CONNECT_DEVICE:
// When DeviceListActivity returns with a device to connect
if (resultCode == Activity.RESULT_OK) {
// Get the device MAC address
String address = data.getExtras()
.getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
// Get the BLuetoothDevice object
BluetoothDevice device = m_BluetoothAdapter.getRemoteDevice(address);
// Attempt to connect to the device
connect(device);
}
break;
case REQUEST_ENABLE_BT:
// When the request to enable Bluetooth returns
if (resultCode == Activity.RESULT_OK) {
// Bluetooth is now enabled, so set up a chat session
}
else {
// User did not enable Bluetooth or an error occured
Toast.makeText(this, "Bluetooth not enabled", Toast.LENGTH_SHORT).show();
finish();
}
}
}
C'est ma fonction de connexion :
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private void connect(BluetoothDevice device) {
m_Device = device;
BluetoothSocket tmp = null;
// Get a BluetoothSocket for a connection with the
// given BluetoothDevice
try {
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
}
catch (IOException e) {
}
m_Socket = tmp;
m_BluetoothAdapter.cancelDiscovery();
try {
// This is a blocking call and will only return on a
// successful connection or an exception
m_Socket.connect();
}
catch (IOException e) {
try {
m_Socket.close();
}
catch (IOException e2) {
}
return;
}
}
J'espère que ce que je fais mal est simple, mais j'ai peur que ce ne soit jamais aussi simple. C'est la première fois que je fais du développement Bluetooth, et peut-être que je fais quelque chose de complètement faux... Mais je ne suis pas sûr pourquoi j'obtiens l'exception de découverte de service échouée.
Vous pouvez jumeler/trouver l'appareil à tout moment manuellement sur le téléphone... Il faut un code d'accès, mais je ne pense pas que ce soit le problème que je rencontre.