Ce qui déclenche l'BluetoothDevice.ACTION_ACL émissions?

Je voudrais savoir quels sont les événements à distance des périphériques physiques déclencher ACTION_ACL_CONNECTED et ACTION_ACL_DISCONNECTED dans un appareil d'écoute. Les résultats des tests n'ont pas de sens. J'ai recueilli plusieurs appareils dans un délai de quelques décimètres les uns des autres:

  • une Galaxy Tab P7500 fonctionnant sous Android 3.1
  • un i5500 téléphone fonctionnant sous Android 2.2
  • un WinXP PC avec une clé USB bluetooth
  • deux casques avec on/off

Tout d'abord, j'paire manuellement avec tous les appareils à partir de l'Onglet. Ni le PC, ni le téléphone sont jumelés avec un autre appareil, mais l'Onglet. (L'un des casques d'écoute ne peut jamais être trouvé par l'onglet en aucune façon, mais il peut facilement être trouvé à partir du téléphone à la fois manuellement et par programme). Ensuite, j'ai une application simple pour commencer la découverte et qui est à l'écoute et affiche la liste ACL émissions. Et c'est ce qui se passe (même chose tout le temps, c'est cohérent dans sa folie):

  • startDiscovery() à partir de l'Onglet avec tous les appareils activés: - Le PC est le seul appareil
  • Désactiver bluetooth sur PC: - Pas de réaction sur l'Onglet
  • Activer le bluetooth sur le PC: - Pas de réaction sur l'Onglet
  • Puissance sur le casque 1ère fois: - ACTION_ACL_CONNECTED sur l'Onglet
  • Éteindre le casque: - Pas de réaction sur l'Onglet
  • Puissance sur le casque de nouveau: - ACTION_ACL_DISCONNECTED et ACTION_ACL_CONNECTED en succession rapide sur l'Onglet
  • Désactiver bluetooth sur l'Onglet: - Pas de réaction sur l'Onglet
  • Activer le bluetooth sur l'Onglet: - Casque ACTION_ACL_CONNECTED sur l'Onglet
  • startDiscovery() de téléphone: - Le PC est le seul appareil par l'
    téléphone, même si le téléphone n'est apparié avec l'Onglet, pas avec le
    PC. Sinon, le téléphone ne réagit à l'oreillette qui l'Onglet
    ne réagit jamais sur.

De quoi faire sortir de ce pétrin? Ne peut-on pas s'appuyer sur un dispositif provoquant une ACTION_ACL_CONNECT même quand il est jumelé et les pouvoirs en place au sein de la gamme?

Ici sont les méthodes pour BroadcastReceiver et les activités onCreate, mais je n'attends pas de détails à ce code à la matière:

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();
}
InformationsquelleAutor Tombola | 2012-03-02