2012-03-02 7 views
22

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(); 
} 

Respuesta

14

estoy trabajando con androides muy mal estado bt desde hace bastante tiempo ahora ,

aquí es lo que yo pueda decir:

ACTION_ACL_CONNECTED se envía cada vez que se estableció una conexión exitosa. Este es tan simple como se pone.

Ahora la parte más bien molesta.

ACTION_ACL_DISCONNECTED se envía cada vez que se cierra la conexión en un nivel de HARDWARE. CUANDO eso sucede depende un poco del dispositivo en sí. SI desconectas/desconectas manualmente el otro dispositivo, de alguna manera no envía una señal de "tío, me he ido" al droide, en cambio después de hasta 20 segundos, algunos perros ladran y la conexión se cierra y se envía el intento.

Ahora probé esto solo con dispositivos SPP a los que me conecté. Un auricular afaik se conecta activamente solo porque no es SPP. Por lo tanto, se conecta automáticamente a usted, si está emparejado y en modo de escucha. Ahora no sé lo que hace el auricular si lo "apagas". Tal vez se desconecta correctamente o tal vez solo interrumpe la conexión sin decir adiós. En este último caso, el guardián se tomaría un tiempo para desconectarse del lado droide, lo que puede llevar de 0 a 20 segundos, no me preguntes por qué, es solo mi observación.

+0

agrre con usted. Después de una conexión de 10 segundos, se recibe la transmisión diconnect –

Cuestiones relacionadas