Je rencontre un problème lors de la connexion de mes appareils à Android. Si je vais dans les paramètres et les appairer je peux manuellement les amener à se connecter en utilisant le code suivant:Android Bluetooth échoue à la paire
serveur
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.connect);
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
startActivityForResult(discoverableIntent, REQUEST_ENABLE_BT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if(requestCode == REQUEST_ENABLE_BT)
{
if(resultCode == RESULT_CANCELED)
{
new AlertDialog.Builder(this)
.setTitle(R.string.error)
.setMessage(R.string.bluetooth_unavailable)
.setPositiveButton(android.R.string.ok, AndroidUtils.DismissListener)
.create()
.show();
}
else
{
mServerSocket = mAdapter.listenUsingRfcommWithServiceRecord("Moo Productions Bluetooth Server", mUUID);
mState = State.ACCEPTING;
BluetoothSocket socket = mServerSocket.accept();
mServerSocket.close();
connected(socket);
}
}
}
client
Set<BluetoothDevice> pairedDevices = mAdapter.getBondedDevices();
BluetoothSocket socket = null;
// Search the list of paired devices for the right one
for(BluetoothDevice device : pairedDevices)
{
try
{
mState = State.SEARCHING;
socket = device.createRfcommSocketToServiceRecord(mUUID);
mState = State.CONNECTING;
socket.connect();
connected(socket);
break;
}
catch (IOException e)
{
socket = null;
continue;
}
}
Mais si les appareils n'ont pas déjà été jumelés, il sort de la foreach sans connexion à une socket valide. Dans ce cas, je commence à découvrir.
// If that didn't work, discover
if(socket == null)
{
mState = State.SEARCHING;
mReceiver = new SocketReceiver();
mContext.registerReceiver(mReceiver, new IntentFilter(BluetoothDevice.ACTION_FOUND));
mAdapter.startDiscovery();
}
// ... Later ...
private class SocketReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
if(BluetoothDevice.ACTION_FOUND.equals(intent.getAction()))
{
try
{
// Get the device and try to open a socket
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(mUUID);
mState = State.CONNECTING;
socket.connect();
// This is our boy, so stop looking
mAdapter.cancelDiscovery();
mContext.unregisterReceiver(mReceiver);
connected(socket);
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
}
Mais il ne trouvera jamais l'autre périphérique. Je n'obtiens jamais une boîte de dialogue d'appairage et quand je la traverse, je vois qu'elle découvre le périphérique correct, mais elle ne parvient pas à se connecter avec cette exception java.io.IOException: Service discovery failed
. Des idées sur ce qui me manque?
salut CaseyB howz u? Je suis également bloquant ici dans le même problème .. signifie quand je me connecte d'un périphérique à l'autre son se connecter et encore si je fais du deuxième au premier périphérique log chat montrant le message "service découverte a échoué" alors pourquoi il ne se connecte pas autre appareil que je l'avais essayé wid plrent les pls de UUId m'aider. – shyam
Je n'ai jamais été capable de comprendre cela. Je suis passé à un autre projet. Pardon. – CaseyB