java 蓝牙指定连接失败_java – 蓝牙:服务发现失败

在尝试使用Android应用(4.1.2版本的三星手机)通过蓝牙连接到Win7笔记本时遇到服务发现失败的问题。已尝试配对且权限设置正确,无论安全或不安全连接均无法建立。问题可能与UUID的使用有关,尤其是已知UUID"00001101-0000-1000-8000-00805F9B34FB"的含义及使用场景。尝试使用随机UUID未解决问题。日志显示D-Bus错误,可能存在设备或蓝牙配置问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我尝试在我的

Android应用程序(运行4.1.2的三星手机:客户端)和我的笔记本电脑(Win7,64位:服务器)之间建立蓝牙连接.服务发现失败时始终失败.

我阅读了有关这方面的各种主题(here和there),但它没有解决我的问题.

我有两个问题:

>什么意思是众所周知的UUID“00001101-0000-1000-8000-00805F9B34FB”.应该使用何时/何时使用?

>任何建议调查/解决我的问题将不胜感激.

备注:

>我试图建立一个安全和不安全的连接(同时失败)

>我可以通过设置>蓝牙将我的笔记本电脑和设备配对

>正如评论中所建议的那样:我尝试使用随机生成的UUID(但两侧都是相同的)而不是众所周知的UUID,但我仍然有完全相同的行为.

我有这些权限

编辑

我没有在客户端编码UUID,而是尝试了以下方法(但仍然得到相同的错误):

UUID uuid = bluetoothDevice.getUuids()[bluetoothDevice.getUuids().length-1].getUuid();

echo-server的UUID始终是数组中的最后一个.

结束编辑

以下是客户端上的相关日志:

08-22 12:30:28.627: ERROR/BluetoothService.cpp(12008): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)

08-22 12:30:28.647: INFO/BluetoothSocket.cpp(18030): Setting Master socket option

08-22 12:30:28.647: VERBOSE/BluetoothSocket.cpp(18030): ...fd 43 created (RFCOMM, lm = 7)

08-22 12:30:28.687: DEBUG/BluetoothPolicyService(12008): getAllowBluetoothDataTransfer - showMsg: true

08-22 12:30:28.687: DEBUG/BluetoothPolicyService(12008): MDM: isProfileEnabled = true

08-22 12:30:28.697: DEBUG/BluetoothUtils(18030): isSocketAllowedBySecurityPolicy start : device null

08-22 12:30:28.727: ERROR/BluetoothEventLoop.cpp(12008): onCreateDeviceResult: D-Bus error: org.bluez.Error.AlreadyExists (Already Exists)

08-22 12:30:28.727: VERBOSE/BluetoothService.cpp(12008): discoverServicesNative

08-22 12:30:28.727: VERBOSE/BluetoothService.cpp(12008): ... Object Path = /org/bluez/12635/hci0/dev_00_09_DD_50_88_54

08-22 12:30:28.727: VERBOSE/BluetoothService.cpp(12008): ... Pattern = , strlen = 0

08-22 12:30:29.138: VERBOSE/BluetoothEventLoop.cpp(12008): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/12635/hci0/dev_00_09_DD_50_88_54

08-22 12:30:29.138: DEBUG/BluetoothEventLoop(12008): Device property changed

08-22 12:30:32.141: DEBUG/BluetoothA2DPStateReceiver(15827): BluetoothA2DPStateReceiver constructor call()

08-22 12:30:32.141: DEBUG/BluetoothA2DPStateReceiver(15827): onReceive(): action = android.bluetooth.device.action.ACL_CONNECTED

08-22 12:30:32.141: DEBUG/BluetoothA2DPStateReceiver(15827): ACTION_ACL_CONNECTED

08-22 12:30:32.141: DEBUG/BluetoothA2DPSinkInfo(15827): checkBlackListCarkit() : isBlackListCarkit false

08-22 12:30:32.161: DEBUG/BluetoothNotiBroadcastReceiver(15910): onReceive

08-22 12:30:40.749: ERROR/Bluetooth(18030): Cannot connect

java.io.IOException: Service discovery failed

at android.bluetooth.BluetoothSocket$SdpHelper.doSdp(BluetoothSocket.java:475)

at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:241)

at com.company.BlueToothTestActivity.open(BlueToothTestActivity.java:48)

at com.company.BlueToothTestActivity$1.run(BlueToothTestActivity.java:29)

08-22 12:30:40.749: WARN/Bluetooth(18030): Unable to open connection !

这是重现错误的代码(它的简化版本,它编译并重现错误 – 至少在我的硬件上 – )

客户

import android.app.Activity;

import android.bluetooth.BluetoothAdapter;

import android.bluetooth.BluetoothDevice;

import android.bluetooth.BluetoothSocket;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.LinearLayout;

import java.io.IOException;

import java.util.UUID;

public class BlueToothTestActivity extends Activity {

private String macAddress = "00:09:DD:50:88:54"; //hardcoded laptop macAddress

private BluetoothAdapter mBluetoothAdapter;

private BluetoothDevice bluetoothDevice;

private BluetoothSocket socket;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Thread bluetoothClientThread = new Thread(){

@Override

public void run() {

if(open()){

Log.i("Bluetooth","Connection is open !");

}else{

Log.w("Bluetooth","Unable to open connection !");

}

}

};

bluetoothClientThread.start();

initUI();

}

public boolean open() {

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

bluetoothDevice = mBluetoothAdapter.getRemoteDevice(macAddress);

String BT_UUID = "00001101-0000-1000-8000-00805F9B34FB";

try {

mBluetoothAdapter.cancelDiscovery();

//socket = bluetoothDevice.createInsecureRfcommSocketToServiceRecord(UUID.fromString(BT_UUID));

socket = bluetoothDevice.createRfcommSocketToServiceRecord(UUID.fromString(BT_UUID));

socket.connect(); //Block 12 sec here, then throw the exception.

return true;

} catch (IOException e) {

try {

socket.close();

} catch (IOException closeException) { }

Log.e("Bluetooth", "Cannot connect", e);

return false;

}

}

private void initUI(){

LinearLayout linearLayout = new LinearLayout(this);

Button finish = new Button(this);

finish.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

if(socket!=null){

try {

socket.close();

} catch (IOException e) {

e.printStackTrace();

}

}

BlueToothTestActivity.this.finish();

}

});

finish.setText("Exit");

linearLayout.addView(finish);

setContentView(linearLayout);

}

}

服务器

import java.io.*;

import javax.bluetooth.*;

import javax.microedition.io.*;

// sample code from : http://www.miniware.net/mobile/articles/viewarticle.php?id=22 (Nikos Fotiou)

public class EchoServer {

public final UUID uuid = new UUID("0000110100001000800000805F9B34FB",false);

public final String name = "EchoServer"; //the name of the service

public final String url = "btspp://localhost:" + uuid + ";name=" + name + ";authenticate=false;encrypt=false;";

LocalDevice local = null;

StreamConnectionNotifier server = null;

StreamConnection conn = null;

public EchoServer() {

try {

System.out.println("Setting device to be discoverable...");

local = LocalDevice.getLocalDevice();

local.setDiscoverable(DiscoveryAgent.GIAC);

System.out.println("Start service:"+url);

server = (StreamConnectionNotifier)Connector.open(url);

System.out.println("Waiting for incoming connection...");

conn = server.acceptAndOpen(); // stop and wait here

System.out.println("Client Connected..."); //never reach this line

DataInputStream din = new DataInputStream(conn.openInputStream());

while(true){

String cmd = "";

char c;

while (((c = din.readChar()) > 0) && (c!='\n') ){

cmd = cmd + c;

}

System.out.println("Received " + cmd);

}

} catch (Exception e) {

System.err.println("Exception Occured: " + e.toString());

e.printStackTrace();

}

}

public static void main (String args[]){

EchoServer echoserver = new EchoServer();

}

}

服务器pom.xml

net.sf.bluecove

bluecove

2.1.1-SNAPSHOT

pyx4me-web-snapshot

http://www.pyx4me.com/maven2-snapshot

true

false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值