Tôi hiện đang làm việc trên ứng dụng Android kết nối với một công cụ qua Bluetooth và cần phải viết lệnh chuỗi và nhận phản hồi chuỗi. Hiện tại tôi có kết nối/đọc/ghi làm việc cho TCP/IP qua Wi-Fi và hiện đang cố gắng triển khai Bluetooth. Nhưng tôi đang chạy vào một số rào chắn. Tôi đã tìm kiếm trên web để tìm các ví dụ về điều tương tự và không có bất kỳ may mắn nào. Tôi đã sử dụng ví dụ về tài nguyên dành cho nhà phát triển Android: Trò chuyện qua Bluetooth làm điểm tham chiếu chính của tôi.Lỗi phát hiện dịch vụ không thành công khi sử dụng Bluetooth trên Android
Mã hiện tại của tôi có vẻ hoạt động .. Sau đó, nó sẽ phát hiện ra dịch vụ Khám phá không thành công ở điểm kết nối. Tôi đang sử dụng lớp DeviceListActivity
để khám phá và chọn thiết bị tôi muốn kết nối. Nó trả về anActivityResult và sau đó lớp Bluetooth của tôi đợi nó xử lý và sau đó kết nối với nó. Mã bên dưới gần giống với Ứng dụng trò chuyện Bluetooth.
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(!m_BluetoothAdapter.isEnabled())
{
m_BluetoothAdapter.enable();
}
switch (requestCode) {
case REQUEST_CONNECT_DEVICE:
// When DeviceListActivity returns with a device to connect
if (resultCode == Activity.RESULT_OK) {
// Get the device MAC address
String address = data.getExtras()
.getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);
// Get the BLuetoothDevice object
BluetoothDevice device = m_BluetoothAdapter.getRemoteDevice(address);
// Attempt to connect to the device
connect(device);
}
break;
case REQUEST_ENABLE_BT:
// When the request to enable Bluetooth returns
if (resultCode == Activity.RESULT_OK) {
// Bluetooth is now enabled, so set up a chat session
}
else {
// User did not enable Bluetooth or an error occured
Toast.makeText(this, "Bluetooth not enabled", Toast.LENGTH_SHORT).show();
finish();
}
}
}
Đây là chức năng kết nối của tôi:
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private void connect(BluetoothDevice device) {
m_Device = device;
BluetoothSocket tmp = null;
// Get a BluetoothSocket for a connection with the
// given BluetoothDevice
try {
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
}
catch (IOException e) {
}
m_Socket = tmp;
m_BluetoothAdapter.cancelDiscovery();
try {
// This is a blocking call and will only return on a
// successful connection or an exception
m_Socket.connect();
}
catch (IOException e) {
try {
m_Socket.close();
}
catch (IOException e2) {
}
return;
}
}
Hy vọng rằng, bất cứ điều gì tôi đang làm sai rất đơn giản, nhưng tôi sợ nó không bao giờ là dễ dàng. Đây là lần đầu tiên tôi thực hiện bất kỳ sự phát triển Bluetooth nào, và có lẽ tôi đang làm điều gì đó một cách mù quáng ... Nhưng tôi không chắc tại sao tôi lại phát hiện ra dịch vụ không thành công.
Bạn có thể ghép/tìm thiết bị mọi lúc thủ công trên điện thoại ... Nó yêu cầu mật mã, nhưng tôi không nghĩ đó là vấn đề tôi đang gặp phải.
Chờ, tôi có một vài ứng dụng Bluetooth và tôi đã không tìm thấy một tình huống mà việc sử dụng sự phản chiếu (getclass.getmethod) là cần thiết. Bạn có thể cho tôi biết thêm một chút về phần cứng bạn đã thử không? Tôi rất muốn biết liệu sự phản chiếu có thực sự cần thiết trong những tình huống nhất định không. –
Sau một số thử nghiệm. Tôi thấy rằng nó thực sự là điện thoại có vấn đề với nó. HTC Incredible không kết nối bằng cách sử dụng phương pháp đầu tiên, tuy nhiên Samsung Galaxy S và một chiếc khác, không thể nhớ cái nào, đã kết nối vào lần thử đầu tiên. – TxAg
Tôi đã bị cản trở với ngoại lệ này và giải pháp này dường như đã khắc phục được sự cố của tôi. Bạn có hiểu những gì đang xảy ra ở đây và tại sao nó làm giảm bớt vấn đề của dịch vụ Discovery không? – GobiasKoffi