Chciałbym wiedzieć, jakie zdarzenia w zdalnych urządzeniach fizycznych wyzwalają ACTION_ACL_CONNECTED i ACTION_ACL_DISCONNECTED w urządzeniu podsłuchowym. Moje wyniki testu nie mają sensu. I zebrali kilka urządzeń w ciągu kilku decymetr wzajemnie:Co uruchamia transmisje BluetoothDevice.ACTION_ACL?
Galaxy Tab P7500 z systemem Android 3.1
telefonu I5500 z systemem Android 2.2
winXP PC z kluczem USB Bluetooth
dwa zestawy słuchawkowe z przyciskami włączania/wyłączania
Najpierw paruję ręcznie ze wszystkimi urządzeniami z karty. Ani komputer, ani telefon nie są sparowane z żadnym innym urządzeniem oprócz Tab. (Jeden zestaw słuchawkowy nigdy nie zostanie znaleziony przez kartę, ale można go łatwo znaleźć z telefonu zarówno ręcznie, jak i programowo). Następnie mam prostą aplikację do uruchamiania wykrywania, która słucha i wyświetla transmisje ACL. A to, co się dzieje (to samo za każdym razem jego konsekwentne w swoim szaleństwie):
- startDiscovery() na karcie po włączeniu wszystkich urządzeń: - Komputer PC jest jedynym urządzeniem znaleźć
- Wyłącz Bluetooth na PC: - Brak reakcji na karcie
Włącz bluetooth na PC: - brak reakcji na karcie
Moc zestawu słuchawkowego 1 raz: - ACTION_ACL_CONNECTED na karcie
- Mocy off Stery: - Nie o reakcję n Tab
Moc zestawu słuchawkowego znowu: - ACTION_ACL_DISCONNECTED i ACTION_ACL_CONNECTED w krótkim odstępie czasu na karcie
wyłączyć Bluetooth w zakładce: - Brak reakcji na karcie
Włącz Bluetooth w zakładce - Słuchawki ACTION_ACL_CONNECTED na karcie
startDiscovery() z telefonem: - PC jest jedynym urządzeniem znaleziony przez telefon , mimo że telefon jest powiązany tylko z uchwyt, a nie z komputerów. W przeciwnym razie telefon reaguje tylko na zestaw słuchawkowy, na który karta nie reaguje.
Co zrobić z tym bałaganem? Czy nie można polegać na urządzeniu powodującym ACTION_ACL_CONNECT, nawet gdy jest ono sparowane i zasila się w zasięgu?
Oto sposoby BroadcastReceiver i działalności onCreate, ale nie spodziewam się szczegółów na temat kodu znaczenia:
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 z tobą. Po może być 10 sekund połączenie, diconnect transmisja jest recived –