Tengo un problema para hacer que mis dispositivos se sincronicen en Android. Si entro en la configuración, y reunirlos manualmente puedo conseguir que se conectan con el siguiente código:Bluetooth de Android no se puede emparejar
servidor
@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);
}
}
}
cliente
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;
}
}
Pero si los dispositivos aún no se han emparejado, se sale del foreach sin conectarse a un socket válido En ese caso, empiezo a descubrir.
// 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();
}
}
}
}
Pero nunca encontrará el otro dispositivo. Nunca aparece un cuadro de diálogo de emparejamiento y cuando lo veo veo que descubre el dispositivo correcto, pero no se puede conectar con esta excepción java.io.IOException: Service discovery failed
. ¿Alguna idea de lo que me estoy perdiendo?
Hola CaseyB howz u? También me estoy metiendo aquí en el mismo problema ... significa que cuando me conecto de un dispositivo a otro me conecto y de nuevo si lo hago desde el segundo hasta el primer registro del dispositivo mostrando el mensaje "error en el descubrimiento del servicio", entonces ¿por qué no se está conectando? otro dispositivo lo había probado con otros tipos. Los pls de UUId me ayudaron. – shyam
Nunca pude resolver esto. Pasé a otro proyecto. Lo siento. – CaseyB