Tôi chưa từng làm việc với máy tính bảng, nhưng tôi đã viết một ứng dụng sử dụng SPP cho điện thoại Android. Điều tôi thấy là để có được Bluetooth ổn định, tôi phải liên kết thủ công với thiết bị mà tôi muốn liên lạc. Chúng tôi đã sử dụng mã bên dưới để bắt đầu liên kết từ bên trong ứng dụng và cần giữ lại liên kết giống như khi bạn ghép nối thủ công thông qua menu cài đặt.
Đây là dòng chảy chung: 1) Đăng ký một BroadcastReceiver để nghe cho BluetoothDevice.ACTION_BOND_STATE_CHANGED
2) Sau khi phát hiện thiết bị mà bạn nên có một đối tượng BluetoothDevice.
3) Sử dụng phản ánh để gọi phương thức 'createBond' trên BluetoothDeviceObject
3a) Chờ cho các sự kiện thay đổi trạng thái trái phiếu trước khi mở ổ cắm
BluetoothDevice device = {obtained from device discovery};
Method m = device.getClass().getMethod("createBond", (Class[])null);
m.invoke(device, (Object[])null);
int bondState = device.getBondState();
if (bondState == BluetoothDevice.BOND_NONE || bondState == BluetoothDevice.BOND_BONDING)
{
waitingForBonding = true; // Class variable used later in the broadcast receiver
// Also...I have the whole bluetooth session running on a thread. This was a key point for me. If the bond state is not BOND_BONDED, I wait here. Then see the snippets below
synchronized(this)
{
wait();
}
}
4) Chờ cho tình trạng trái phiếu để thay đổi từ BOND_BONDING để BOND_BONDED
Bên trong một BroadcastReciever:
public void onReceive(Context context, Intent intent)
{
if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(intent.getAction()))
{
int prevBondState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, -1);
int bondState = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, -1);
if (waitingForBonding)
{
if (prevBondState == BluetoothDevice.BOND_BONDING)
{
// check for both BONDED and NONE here because in some error cases the bonding fails and we need to fail gracefully.
if (bondState == BluetoothDevice.BOND_BONDED || bondState == BluetoothDevice.BOND_NONE)
{
// safely notify your thread to continue
}
}
}
}
}
5) socket mở và giao tiếp
Bạn cũng có thể sử dụng phương pháp 'removeBond' thông qua phản chiếu để xóa thiết bị của bạn khỏi danh sách ghép nối.
Hy vọng điều này sẽ hữu ích!
Tôi sẽ xem xét chi tiết về hành vi ghép nối tạm thời này ở đâu; Tài liệu Android hoặc bluetooth 2.1 tài liệu đặc điểm kỹ thuật? Nếu đó là vấn đề Android, nó sẽ được tái sản xuất trên tất cả các điện thoại. Hoặc là nó liên quan đến việc thực hiện nhà sản xuất trên ngăn xếp bluetooth? – Ashwini
Nhà sản xuất phụ thuộc vào tùy chọn mà nó cung cấp cho cặp/trái phiếu so với chỉ xác thực để kết nối tạm thời. Thông thường hành động rõ ràng để ghép nối (điều này cũng ngụ ý việc lưu thiết bị được ghép nối là thông qua bluetooth hệ thống - menu cài đặt) –