Tôi muốn nghe kết nối/ngắt kết nối với một số thiết bị bluetooth cụ thể có địa chỉ MAC mà tôi biết, nhưng không nhất thiết phải ghép nối (tôi không muốn gây rối với danh sách thiết bị được ghép nối của người dùng và ngược lại). Tôi chỉ quan tâm đến việc khám phá sự hiện diện của họ, không giao tiếp với họ.Cách xác định * thiết bị bluetooth nào gây ra phát sóng ACTION_ACL_CONNECTED?
Điều này hoạt động rất tốt với mã của tôi bên dưới! Nhưng vấn đề của tôi là tôi không thể tìm ra thiết bị cụ thể nào đang kết nối/ngắt kết nối, chỉ có nó xảy ra với một người nào đó. Làm thế nào tôi có thể tìm ra hành động nào liên quan đến hành động nào?
Trước tiên tôi nhanh chóng đối tượng cho hai thiết bị bluetooth vật lý cụ thể của tôi và thêm chúng vào bộ lọc ý định của tôi:
BluetoothDevice myPinkHeadset = mBluetoothAdapter.getRemoteDevice("18:17:0C:EB:9C:81");
BluetoothDevice myPcBluetoothDongle = mBluetoothAdapter.getRemoteDevice("5A:7A:CC:4B:C5:08");
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(myPinkHeadset.ACTION_ACL_CONNECTED);
intentFilter.addAction(myPinkHeadset.ACTION_ACL_DISCONNECTED);
intentFilter.addAction(myPcBluetoothDongle.ACTION_ACL_CONNECTED);
intentFilter.addAction(myPcBluetoothDongle.ACTION_ACL_DISCONNECTED);
Sau đó, tôi lắng nghe chương trình phát sóng về họ:
final BroadcastReceiver intentReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Bây giờ tôi muốn tìm cái nào đã được kết nối và/hoặc ngắt kết nối, và tôi không thấy làm thế nào tôi có thể làm điều đó.
Hoặc 1) Tôi sử dụng "BluetoothDevice" trực tiếp. Nó phản ứng với chương trình phát sóng, nhưng nó không nói cho tôi biết về hai thiết bị vật lý mà hành động liên quan. Là cách của họ để tìm hiểu? Không được phép sử dụng Bluetooth.getName() vì đây không phải là lớp tĩnh.
if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
}
hoặc 2) Tôi lắng nghe cả hai hành động cho cả hai thiết bị.
if (myPinkHeadset .ACTION_ACL_CONNECTED.equals(action)) {
Log.v(TAG, "Connected to myPinkHeadset ");
}
else if (myPinkHeadset .ACTION_ACL_DISCONNECTED.equals(action)) {
Log.v(TAG, "Disconnected from myPinkHeadset ");
}
else if (myPcBluetoothDongle .ACTION_ACL_CONNECTED.equals(action)) {
Log.v(TAG, "Connected to myPcBluetoothDongle ");
}
else if (myPcBluetoothDongle .ACTION_ACL_DISCONNECTED.equals(action)) {
Log.v(TAG, "Disconnected from myPcBluetoothDongle ");
Nhưng sau đó nó ghi nhật ký kết nối với myPinkHeadset ngay cả khi nó là myPvBluetoothDongle tôi kích hoạt vật lý. Nó luôn luôn đi cho một trong đó đến đầu tiên của các xét nghiệm nếu. Nó chỉ quan tâm đến hành động, không phải về đối tượng mà nó quan tâm.
Tôi thấy rằng EXTRA_DEVICE là "Được sử dụng làm trường bổ sung Bluetooth có thể kiện trong mọi mục đích được phát bởi lớp này". Nhưng nó chỉ trả về null với tôi:
String extra = intent.getStringExtra(BluetoothDevice.EXTRA_DEVICE);
đã phạm sai lầm tương tự với bưu kiện, Chuỗi gây nhầm lẫn – NikkyD