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
etACTION_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();
}
Vous devez vous connecter pour publier un commentaire.
Je travaille avec des androïdes vraiment foiré bt pour un certain temps maintenant,
voici ce que je peux vous dire:
ACTION_ACL_CONNECTED est envoyé à chaque fois qu'une connexion a été établie. Celui-ci est aussi simple que cela.
Maintenant plutôt ennuyeux partie.
ACTION_ACL_DISCONNECTED est envoyé à chaque fois que la connexion a été fermée au niveau MATÉRIEL. LORSQUE cela se produit, est un peu à l'appareil lui-même.
SI vous avez manuellement le débrancher/brancher l'autre appareil, de toute façon il n'envoie pas un "mec, im gone" signal pour le droid, au lieu de cela après 20 secondes de certains chien de garde qui aboie et la connexion est fermée et que l'intention est envoyé.
Maintenant je n'ai essayer qu'avec SPP appareils que j'ai connecter.
Un casque autant que je sache, est en connexion active par elle-même parce que son pas SPP. De sorte qu'il se connecte automatiquement à vous, si vous êtes jumelés et en mode d'écoute. Maintenant, je ne sais pas ce que le casque d'écoute ne si vous "l'éteindre". Peut-être qu'il se déconnecte correctement ou peut-être qu'il perturbe la connexion sans dire au revoir. Dans ce dernier cas, il faudra un certain temps pour le chien de garde pour le débrancher de la droid côté, ce qui peut prendre de 0 à 20 secondes, ne me demandez pas pourquoi, c'est juste mon observation.