无法连接到android上的蓝牙套接字
Posted
技术标签:
【中文标题】无法连接到android上的蓝牙套接字【英文标题】:unable to connect to bluetooth socket on android 【发布时间】:2012-12-12 00:28:51 【问题描述】:我正在尝试通过蓝牙将消息从 android 客户端发送到 Mac OS X。 我在 Mac OS X Snow Leopard 上使用 bluecove 2.0.1 Java 蓝牙库。
服务器代码:
public class EchoServer2
private static final String UUID_STRING = "00001101-0000-1000-8000-00805F9B34FB"; // 32 hex digits
private static final String SERVICE_NAME = "echoserver";
private LocalDevice mLocalDevice;
public EchoServer2()
try
mLocalDevice = LocalDevice.getLocalDevice();
catch(IOException e)
System.err.print("Error connection to bluetooth");
public void start() throws IOException
StreamConnectionNotifier connectionNotifier =
(StreamConnectionNotifier) Connector.open(
"btspp://localhost:" + UUID_STRING +
";name=" + SERVICE_NAME + ";authenticate=false");
System.out.println("Bluetooth Address: " + mLocalDevice.getBluetoothAddress());
System.out.println("Waiting for a connection...");
StreamConnection streamConnection = connectionNotifier.acceptAndOpen();
System.out.println("Found a new device.");
RemoteDevice device = RemoteDevice.getRemoteDevice(streamConnection);
System.out.println("New Device connected: " + device.getFriendlyName(false).toString());
DataInputStream is = streamConnection.openDataInputStream();
byte[] bytes = new byte[1024];
int r;
while((r = is.read(bytes)) > 0)
System.out.println(new String(bytes, 0, r));
Android 客户端代码:
public class MainActivity extends Activity
private static final String TAG = "MainActivity";
EditText editText;
TextView textView;
String send_msg;
String rcv_msg;
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); // 32 hex digits
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
editText = (EditText) findViewById(R.id.edit_msg);
textView = (TextView) findViewById(R.id.rcv_msg);
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
if(adapter == null)
textView.append("Bluetooth NOT Supported!");
return;
// Request user to turn ON Bluetooth
if(!adapter.isEnabled())
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, RESULT_OK);
@Override
public boolean onCreateOptionsMenu(Menu menu)
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
public void onClick(View view)
Log.d(TAG, "onClick");
new SendMessageToServer().execute(send_msg);
private class SendMessageToServer extends AsyncTask<String, Void, String>
@Override
protected String doInBackground(String... msg)
Log.d(TAG, "doInBackground");
BluetoothSocket clientSocket = null;
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mBluetoothAdapter.enable();
// Client knows the server MAC address
BluetoothDevice mmDevice = mBluetoothAdapter.getRemoteDevice("00:25:00:C3:1C:FE");
Log.d(TAG, "got hold of remote device");
Log.d(TAG, "remote device: " + mmDevice.getName().toString());
try
// UUID string same used by server
clientSocket = mmDevice.createInsecureRfcommSocketToServiceRecord(MY_UUID);
Log.d(TAG, "bluetooth socket created");
mBluetoothAdapter.cancelDiscovery(); // Cancel, discovery slows connection
clientSocket.connect();
Log.d(TAG, "connected to server");
DataInputStream in = new DataInputStream(clientSocket.getInputStream());
DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream());
out.writeUTF(msg[0]); // Send message to server
Log.d(TAG, "Message Successfully sent to server");
return in.readUTF(); // Read response from server
catch (Exception e)
Log.d(TAG, "Error creating bluetooth socket");
Log.d(TAG, e.getMessage());
return "";
@Override
protected void onPostExecute(String result)
Log.d(TAG, "onPostExecute");
rcv_msg = result;
textView.setText(rcv_msg);
即使客户端和服务器的UUID
相同,我也无法连接到服务器。
Android 抛出异常:服务发现失败。
但是我可以在服务器上打印远程设备(客户端)的名称。因此acceptAndOpen()
无法接受套接字连接。
请帮助我理解为什么我无法clientSocket.connect()
;在安卓上?
【问题讨论】:
你解决了吗?我遇到了完全相同的问题,但我似乎无法让它工作。 【参考方案1】:我猜测一下,这与您使用的 UUID 编号有关。它们仅取决于您使用的设备类型。因此,请确保您查找它们并且它们对于 android 设备是正确的。当我在做android时,这让我很长一段时间。 UUID 不是您设置的。 这是一个链接 How can I get the UUID of my Android phone in an application? 或这个 Android - Get Bluetooth UUID for this device
如果不是这样。 发现两端都失败了吗?你能看到两端的设备吗?你可以在哪一面打印名字? 你可能想看看谷歌的蓝牙示例程序。并以此为起点。
【讨论】:
以上是关于无法连接到android上的蓝牙套接字的主要内容,如果未能解决你的问题,请参考以下文章
使用蓝牙无法同时将超过 4 个从机连接到 master-android
Expo react-native 将无法连接到 socketio(Android 和 iOS)
Android 手机从蓝牙更改为 BLE 后无法连接到树莓派