Me gustaría saber qué eventos en dispositivos físicos remotos desencadenan ACTION_ACL_CONNECTED y ACTION_ACL_DISCONNECTED en un dispositivo de escucha. Los resultados de mi prueba no tienen sentido. He reunido varios dispositivos dentro de unos decímetro el uno del otro:¿Qué desencadena las transmisiones BluetoothDevice.ACTION_ACL?
un Galaxy Tab P7500 con Android 3.1
un teléfono i5500 con Android 2.2
un WinXP PC con un adaptador Bluetooth USB
dos auriculares con botones de encendido/apagado
Primero, emparejo manualmente con todos los dispositivos de la pestaña. Ni la PC ni el teléfono están emparejados con ningún otro dispositivo, excepto la Pestaña. (Uno de los auriculares no se puede encontrar en la pestaña de ninguna manera, pero se puede encontrar fácilmente desde el teléfono de forma manual y mediante programación). Luego tengo una aplicación simple para iniciar el descubrimiento y que escucha y muestra las transmisiones ACL. Y esto es lo que sucede (lo mismo cada vez, su consecuente en su locura):
- startDiscovery() de la lengüeta con todos los dispositivos habilitados: - El PC es el único dispositivo que se encuentra
- Inhabilitar Bluetooth en el PC: - No hay reacción en la pestaña
habilitar Bluetooth en el PC: - No hay reacción en el Poder Tab
en el auricular primera vez: - ACTION_ACL_CONNECTED en la pestaña
- Apagar el auricular: - No hay reacción o n Poder Tab
en el auricular de nuevo: - ACTION_ACL_DISCONNECTED y ACTION_ACL_CONNECTED en rápida sucesión en la pestaña
Bluetooth Desactive la Ficha: - No hay reacción en la pestaña
habilitar Bluetooth en Tab: - auricular ACTION_ACL_CONNECTED en la pestaña
startDiscovery() desde el teléfono: - el PC es el único dispositivo que se encuentra al lado del teléfono , aunque el teléfono sólo se empareja con la ficha, no con el PC. De lo contrario, el teléfono solo reacciona a los auriculares que la pestaña nunca reacciona.
¿Qué hacer con este lío? ¿No se puede confiar en un dispositivo que causa ACTION_ACL_CONNECT incluso cuando está emparejado y se enciende dentro del alcance?
Éstos son los métodos para BroadcastReceiver y las actividades alcrear, pero no esperan detalles en este código a la materia:
BroadcastReceiver intentReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (device != null) {
name = device.getName();
Log.v(TAG, "Device=" + device.getName());
}
else {
name = "None";
}
if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
text1.setText(name + " connected " + (checkCounter++));
Log.v(TAG, "connected: " + device);
}
else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
text2.setText(name + " disconnected " + (checkCounter++));
Log.v(TAG, "disconnected: " + device);
}
else if (BluetoothDevice.ACTION_FOUND.equals(action)) {
text3.setText(name + " found " + (checkCounter++));
Log.v(TAG, "found: " + device + "");
}
else if (blueAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
text4.setText("Started " + (checkCounter++));
Log.v(TAG, "Discovery started");
}
else if (blueAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
text4.setText("Finished " + (checkCounter++));
Log.v(TAG, "Discovery finished");
}
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.bluetoothlayout);
text1 = (TextView)findViewById(R.id.textView1);
text2 = (TextView)findViewById(R.id.textView2);
text3 = (TextView)findViewById(R.id.textView3);
text4 = (TextView)findViewById(R.id.textView4);
BluetoothDevice mw600 = blueAdapter.getRemoteDevice("58:17:0C:EB:C5:08");
BluetoothDevice bt500 = blueAdapter.getRemoteDevice("00:1D:43:00:C4:54");
BluetoothDevice galaxyTab = blueAdapter.getRemoteDevice("00:07:AB:6A:96:7D");
BluetoothDevice pcDongle = blueAdapter.getRemoteDevice("00:15:83:4D:8B:57");
intentFilter = new IntentFilter();
intentFilter.addAction(BluetoothDevice.ACTION_FOUND);
intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED);
intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
intentFilter.addAction(blueAdapter.ACTION_DISCOVERY_STARTED);
intentFilter.addAction(blueAdapter.ACTION_DISCOVERY_FINISHED);
if (!isReceiverRegistered) {
registerReceiver(intentReceiver, intentFilter);
isReceiverRegistered = true;
}
if (!blueAdapter.isEnabled()) {
blueAdapter.enable();
}
blueAdapter.startDiscovery();
}
agrre con usted. Después de una conexión de 10 segundos, se recibe la transmisión diconnect –