0
我目前正在嘗試解決我遇到的需要藍牙連接的Android應用程序的問題。一時之間,一切似乎都正常,但當我想連接的從屬藍牙設備未通電時,我注意到一些奇怪的事情。這裏是我的代碼:經過漫長的等待時間藍牙插座狀態混合ups
private void connectDevice() {
mBluetoothAdapter.cancelDiscovery();
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
try {
btSocket = createBluetoothSocket(device);
} catch (IOException e) {
errorExit("Fatal Error", "Socket create failed: " + e.getMessage() + ".");
}
//Try to establish the connection. This will block until it connects.
Log.d(TAG, "...Connecting...");
try {
btSocket.connect();
Log.d(TAG, "....Connection ok...");
} catch (IOException e) {
try {
btSocket.close();
} catch (IOException e2) {
errorExit("Fatal Error", "Unable to close socket during connection failure" + e2.getMessage() + ".");
}
}
//Create a data stream so we can talk to server.
Log.d(TAG, "...Create Socket...");
mConnectedThread = new ConnectedThread(btSocket);
mConnectedThread.start();
mActionBar.setSubtitle("Connected");
return;
}
這裏是我調用這個方法:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode){
case REQUEST_ENABLE_BT:
if (resultCode == RESULT_OK) {
Toast.makeText(this, R.string.bt_enabled, Toast.LENGTH_SHORT).show();
setupCom();
break;
}
else {
// User did not enable Bluetooth or an error occurred
if(D) Log.d(TAG, "BT not enabled");
Toast.makeText(this, R.string.bt_not_enabled_leaving, Toast.LENGTH_SHORT).show();
finish();
break;
}
case REQUEST_CONNECT_DEVICE:
if (resultCode == RESULT_OK){
retrieveAddresse(data);
connectDevice();
}
break;
}
return;
}
我的問題是,當我不在範圍內或我要連接的設備不啓動時,connectDevice()方法似乎執行所有代碼,即使無法連接也是如此,因爲Android OS不希望被連接進程阻塞。我注意到這個問題,因爲mActionBar.setSubtitle(「連接」);得到執行,因爲當我在範圍內時或者從藍牙模塊打開時嘗試重新連接。我無法連接到它,除非我重新啓動我的應用程序。
如何獲取設備地址?使用藍牙發現? – 2013-03-05 02:35:15
該地址由一個DeviceListActivity類檢索,該類給出了列表中的所有設備,我選擇了一個設備,並提取了這部分工作的地址。 – Mathieu660 2013-03-05 02:40:31
正確的你是正確的線程。但是,如果我無法連接,爲什麼我會獲得連接狀態? – Mathieu660 2013-03-05 02:43:00