我正在尝试为学校的一个项目构建一个小蓝牙-Android-App。
我对 Android 很陌生(从 2 天起就拿到了我的手机)。两周以来,我一直在笔记本电脑上使用 android 编程进行试验。安装了一个带有 Android x86 (eeepc) 的 VirtualBox,这样我就可以使用BluetoothAdapter
笔记本电脑了。模拟器不支持蓝牙,速度很慢。那是关于项目...
问题/问题:蓝牙连接有 2 个设备 - 一个正在连接,一个正在监听。监听设备有一个BluetoothServerSocket
, 循环accept()
方法直到accept()
返回一个BluetoothSocket
. 在我的情况下,该accept()
方法没有返回,所以我被卡住了,应用程序冻结并出现黑屏,要求 mit 停止应用程序或只是等待。当我将超时传递给accept()
-->超时后accept(10000)
我得到一个IOException
。
听音装置:
private class AcceptThread extends Thread {
private BluetoothSocket tSocket;
private BluetoothServerSocket bss = null;
public void run() {
try {
Log.d(TAG, "erzeuge ServerSocket");
bss = BluetoothAdapter.getDefaultAdapter().listenUsingInsecureRfcommWithServiceRecord("BluetoothChatInsecure", MainActivity.BT_UUID);
Log.d(TAG, "ServerSocket OK");
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "Fehler Serversocket");
}
while (true) {
Log.d(TAG, "Versuche zu akzeptieren");
try {
Log.d(TAG, "Akzeptieren Anfang");
tSocket = bss.accept(10000);
//this line is never reached
Log.d(TAG, "Akzeptieren Ende");
if (tSocket != null){
//Hier wollen wir hin!
Log.d(TAG, "Verbindung akzeptiert");
ConnectedThread conThread = new ConnectedThread(tSocket);
conThread.run();
bss.close();
break;
} else {
Log.e(TAG, "Fehler, keine Verbindung");
}
} catch (IOException e) {
Log.e(TAG, "IOException währent accept-loop");
//this exception is triggered every 10 sec, when the accept(10000) times out
e.printStackTrace();
}
}
Log.i(TAG, "Acceptthread hat fertig");
}
}
连接装置:
try {
socket = device.createInsecureRfcommSocketToServiceRecord(MainActivity.BT_UUID);
outstr = socket.getOutputStream();
instr = socket.getInputStream();
ois = new ObjectInputStream(instr);
oos = new ObjectOutputStream(outstr);
} catch (IOException e) {
e.printStackTrace();
}
我在 stackoverflow 和其他一些论坛上阅读了很多关于这个主题的主题,但我没有找到解决问题的方法。对不起我的英语,但我不是母语人士。
谢谢你的帮助!
编辑:
我忘了写,我用 2 台设备测试了这个应用程序。我的笔记本电脑确实接受循环,而我使用手机并尝试连接。