已經完后才能藍牙搜索,并且通過點擊ListView將所搜索到的設備顯示出來,點擊所需要選擇的設備將地址顯示在textview中,然后通過地址傳遞開始連接設備,結果沒有反應?請各位大神幫忙看看
//連接藍牙設備
btConnect = findViewById(R.id.bt_connect);
btConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String MAcaddress=tvaddress.getText().toString();
connectDevice(MAcaddress);
Toast.makeText(MainActivity.this, "連接藍牙設備!", Toast.LENGTH_SHORT).show();
}
});
//進行藍牙連接
private void connectDevice(String address) {
// 判斷是否在搜索,如果在搜索,就取消搜索
try { // 獲得遠程設備
BluetoothDevice nwdevice = bluetoothAdapter.getRemoteDevice(address);
// 連接
//mSocket = (BluetoothSocket) nwdevice.getClass().getMethod("createRfcommSocket", new Class[]{int.class}).invoke(nwdevice, 1);
mSocket = nwdevice.createInsecureRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
e.printStackTrace();
}
}
uj5u.com熱心網友回復:
連不上,看錯誤資訊了嗎uj5u.com熱心網友回復:
為啥用反射連接啊,正常的用函式呼叫
gatts = device.connectGatt(instance, false, mGattCallback);
uj5u.com熱心網友回復:
你并沒有連接,只是創建了一個socket.uj5u.com熱心網友回復:
下面有 mSocket.connect();沒有貼出來,各種方法都試了就是連不上
uj5u.com熱心網友回復:
你服務端的socket是怎么寫的。
uj5u.com熱心網友回復:
你并沒有連接,只是創建了一個socket.
下面有 mSocket.connect();沒有貼出來,各種方法都試了就是連不上
你服務端的socket是怎么寫的。
mCurDevice = bluetoothAdapter.getRemoteDevice(address);
}
// 這里需要try catch一下,以防例外拋出
try {
// 判斷客戶端介面是否為空
if (mSocket == null) {
// 獲取到客戶端介面
mSocket = mCurDevice.createRfcommSocketToServiceRecord(MY_UUID);
Log.e(TAG, "connectDevice: 獲取地址設備" );
// 向服務端發送連接
mSocket.connect();
Log.e(TAG, "connectDevice: 開始連接設備" );
// 獲取到輸出流,向外寫資料
os = mSocket.getOutputStream();
Log.e(TAG, "connectDevice: 連接成功" );
}
// 判斷是否拿到輸出流
if (os != null) {
// 需要發送的資訊
String text = "我傳過去了";
// 以utf-8的格式發送出去
os.write(text.getBytes("UTF-8"));
}
Toast.makeText(this, "發送資訊成功,請查收", Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "發送資訊失敗", Toast.LENGTH_LONG).show();
}
uj5u.com熱心網友回復:
你并沒有連接,只是創建了一個socket.
下面有 mSocket.connect();沒有貼出來,各種方法都試了就是連不上
你服務端的socket是怎么寫的。
mCurDevice = bluetoothAdapter.getRemoteDevice(address);
}
// 這里需要try catch一下,以防例外拋出
try {
// 判斷客戶端介面是否為空
if (mSocket == null) {
// 獲取到客戶端介面
mSocket = mCurDevice.createRfcommSocketToServiceRecord(MY_UUID);
Log.e(TAG, "connectDevice: 獲取地址設備" );
// 向服務端發送連接
mSocket.connect();
Log.e(TAG, "connectDevice: 開始連接設備" );
// 獲取到輸出流,向外寫資料
os = mSocket.getOutputStream();
Log.e(TAG, "connectDevice: 連接成功" );
}
// 判斷是否拿到輸出流
if (os != null) {
// 需要發送的資訊
String text = "我傳過去了";
// 以utf-8的格式發送出去
os.write(text.getBytes("UTF-8"));
}
Toast.makeText(this, "發送資訊成功,請查收", Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(this, "發送資訊失敗", Toast.LENGTH_LONG).show();
}
目前通過代碼沒有看出你客戶端有什么問題。
你可以看下的服務端的代碼是否有問題. 有沒有根據MY_UUID創建BluetoothServerSocket.
http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/java/android/bluetooth/BluetoothAdapter.java#2018
uj5u.com熱心網友回復:
拿到socket后在執行緒里socket.connect()轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/45625.html
標籤:Android
上一篇:用Android Studio3.6.2 開發程式,測驗提取網頁的時候某個網頁中文顯示為黑色菱形方塊加問號,應該如何解決?
