Tôi muốn biết sự kiện nào trong các thiết bị vật lý từ xa kích hoạt ACTION_ACL_CONNECTED và ACTION_ACL_DISCONNECTED trong thiết bị nghe. Kết quả kiểm tra của tôi không có ý nghĩa. Tôi đã thu thập được nhiều thiết bị trong vòng vài Decimét nhau:Điều gì kích hoạt chương trình phát sóng BluetoothDevice.ACTION_ACL?
một Galaxy Tab P7500 chạy Android 3.1
một chiếc điện thoại i5500 chạy Android 2.2
một WinXP PC với bluetooth USB dongle
hai tai nghe có nút bật/tắt
Trước tiên, tôi ghép đôi thủ công với tất cả các thiết bị từ Tab. Cả PC và điện thoại đều không được ghép nối với bất kỳ thiết bị nào khác ngoài Tab. (Một trong những tai nghe không bao giờ có thể được tìm thấy bởi các tab trong bất kỳ cách nào, nhưng nó có thể dễ dàng được tìm thấy từ điện thoại cả hai bằng tay và lập trình). Sau đó, tôi có một ứng dụng đơn giản để bắt đầu khám phá và nghe và hiển thị các chương trình phát sóng ACL. Và đây là những gì xảy ra (điều tương tự mọi thời gian, phù hợp của nó trong sự điên loạn của nó):
- startDiscovery() từ Tab với tất cả các thiết bị hỗ trợ: - Các máy tính là thiết bị chỉ được tìm thấy
- Disable bluetooth trên máy tính: - Không phản ứng trên tab
Bật bluetooth trên máy tính: - Không phản ứng trên điện Tab
đúng thời hạn 1 tai nghe: - ACTION_ACL_CONNECTED trên Tab
- Power off tai nghe: - Không có phản ứng o n Tab
Bật tai nghe một lần nữa: - ACTION_ACL_DISCONNECTED và ACTION_ACL_CONNECTED liên tiếp nhanh chóng trên Tab
Disable bluetooth trên Tab: - Không phản ứng trên tab
Bật bluetooth trên Tab: - tai nghe ACTION_ACL_CONNECTED trên Tab
startDiscovery() từ điện thoại: - các máy tính là thiết bị duy nhất được tìm thấy bởi các điện thoại , mặc dù điện thoại chỉ được ghép nối với các Tab, không phải với PC. Nếu không, điện thoại chỉ phản ứng với tai nghe mà Tab không bao giờ phản ứng.
Điều gì tạo nên sự lộn xộn này? Không thể dựa vào thiết bị gây ra ACTION_ACL_CONNECT ngay cả khi thiết bị được ghép nối và tăng quyền trong phạm vi?
Sau đây là các phương pháp để BroadcastReceiver và các hoạt động onCreate, nhưng tôi không mong đợi chi tiết trong mã này vào vấn đề:
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 với bạn. Sau khi có thể kết nối 10 giây, phát lại diconnect được lưu trữ –