当前位置: 代码迷 >> Eclipse >> Android连接蓝牙编程线程有关问题
  详细解决方案

Android连接蓝牙编程线程有关问题

热度:23   发布时间:2016-04-23 02:03:24.0
Android连接蓝牙编程线程问题!
本帖最后由 CreateDBW 于 2012-11-08 13:05:08 编辑 private class ConnectThread extends Thread {
private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;

public ConnectThread(BluetoothDevice device) {
BluetoothSocket tmp = null;
mmDevice = device;
try {
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
Log.d(TAG,
"tmp = device.createRfcommSocketToServiceRecord(MY_UUID)抛出异常");
}
mmSocket = tmp;
}

public synchronized void run() {
if (mAdapter.isDiscovering()) {
mAdapter.cancelDiscovery();
}

try {
mmSocket.connect();

} catch (IOException connectException) {
Log.d(TAG, "mmSocket.connect()抛出异常");
myToast("蓝牙连接失败");
connectException.printStackTrace();
try {
mmSocket.close();
} catch (IOException closeException) {
return;
}
}
}

public void cancel() {
try {
mmSocket.close();
} catch (Exception e) {
}
}
}
下边是打印的Log日志
D/onCreate(2656): onCreate Start
D/BluetoothSocket(2656): create BluetoothSocket: type = 1, fd = -1, uuid = [00001101-0000-1000-8000-00805f9b34fb], port = -1(希望可以解释一下这里)
D/THINBTCLIENT(2656): mmSocket.connect()抛出异常
W/dalvikvm(2656): threadid=9: thread exiting with uncaught exception (group=0x40020578) E/AndroidRuntime(2656): FATAL EXCEPTION: Thread-10
E/AndroidRuntime(2656): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
E/AndroidRuntime(2656): at android.os.Handler.<init>(Handler.java:121)
E/AndroidRuntime(2656): at android.widget.Toast.<init>(Toast.java:68)
E/AndroidRuntime(2656): at android.widget.Toast.makeText(Toast.java:231)
E/AndroidRuntime(2656):at com.net.codeexample.ControlPanelActivity.myToast(ControlPanelActivity.java:277)
E/AndroidRuntime(2656): at com.net.codeexample.ControlPanelActivity$ConnectThread.run(ControlPanelActivity.java:150)
大家帮忙看看:怎么在Activity里启动这个线程(如:mThread.start();)的时候,程序大约5秒之后就意外停止!!!我现在该什么解决这个问题?谢谢各位!
------解决方案--------------------
自己先顶一个啊!!!
------解决方案--------------------
发了一天没有人回答,经过几天的努力终于找到了答案,原来是在线程中不可以对UI线程进行更新操作!(以前不知道,呵呵,有点嫩了!)我的问题反应在这两句话:
E/AndroidRuntime(2656): at android.widget.Toast.<init>(Toast.java:68)
E/AndroidRuntime(2656): at android.widget.Toast.makeText(Toast.java:231)
原来是因为我在run()方法的catch()里边加了显示提示消息的Toast消息(myToast("蓝牙连接失败");)来更新UI线程所以会在抛出异常的时候程序(当前的Activity)也就停止了!把这句话(myToast("蓝牙连接失败");)去掉就行了。
  相关解决方案