【发布时间】:2012-07-10 20:16:30
【问题描述】:
我有一个支持 OBEX 对象推送配置文件的设备,此配置文件基于串行端口配置文件。我的猜测是我可以使用 Android 蓝牙聊天示例将此设备连接到我的 Android 手机。但我遇到了一个问题,关于 android SDK 中的 socket.accept() 功能。我尝试完成将我的手机与此设备连接,如下所示:
adapter = BluetoothAdapter.getDefaultAdapter();
device = adapter.getRemoteDevice("00:1B:DC:0F:EC:7E");
AcceptThread = new AcceptThread(true, adapter, device);
AcceptThread.start();
AcceptThread 中的构造函数编码如下:
public AcceptThread(boolean secure, BluetoothAdapter adapter, BluetoothDevice device) {
BluetoothServerSocket tmp = null;
this.adapter = adapter;
this.device = device;
// Create a new listening server socket
try {
tmp = adapter.listenUsingInsecureRfcommWithServiceRecord(device.getName(), UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
} catch (Exception e) {
Log.e(TAG, ".AcceptThread # listen() failed", e);
}
mmServerSocket = tmp;
}
问题是当我尝试像我之前所说的那样做connect()
public void run() {
BluetoothSocket socket = null;
// Listen to the server socket if we're not connected
while (mState != STATE_CONNECTED) {
try {
// This is a blocking call and will only return on a
// successful connection or an exception
Log.d(TAG, "AcceptThread.run: accepting server socket connection");
socket = mmServerSocket.accept(20000);
Log.d(TAG, ".AcceptThread.run # server socket connection accepted");
} catch (Exception e) {
Log.e(TAG, ".run # accept() failed: "+e);
break;
}
}
}
如您所见,ServerSocket 接受 20 seconds 或 20000 ms. 的每个传入连接,当时间到时,应用程序将像这样抛出 IOException
07-11 10:30:08.355: E/SIMPLECONNECT(1301): .run # accept() failed: java.io.IOException: Connection timed out
这告诉我我的设备无法连接到我的安卓手机。该设备的显示屏上没有连接按钮,只有发送功能,可以将文件发送到我的手机。我相信这个发送功能也会在后台进行连接,但我不确定。
任何人都可以为我确定任何解决方案吗?我在Samsung Galaxy SIII 和Android 4.0.4 上运行我的应用程序
【问题讨论】:
-
三星 xcover 上的相同问题,似乎是三星问题,因为我的其他设备使用相同的代码运行良好。我向三星支持报告了这个问题,但我不期待......所以我会开始一个小赏金。