簡體   English   中英

Android 藍牙不顯示配對對話框

[英]Android Bluetooth not Showing Pairing Dialog

我正在嘗試將我的 HTC myTouch 3G 與藍牙設備配對,該設備將通過 SPP 將 stream 數據連接到手機。 我查看了聊天示例,發現它們缺少我需要的東西,因為我需要高數據速率,並且聊天示例確實阻塞了 UI 線程。 但這就是說我的主要問題是當我嘗試連接當前未配對的設備時,藍牙 API 表示如果設備需要配對代碼,它將自動彈出一個對話框。 這永遠不會發生。 我如何確保它確實如此? 這是我的代碼...

BluetoothSocket btSocket;
String macAddress = data.getStringExtra("mac");
Log.d(TAG, "Found Device " + macAddress);

// Get the Bluetooth adapter on the device
BluetoothAdapter bta = ((MyApplication)this.getApplication()).getBtState();
BluetoothDevice btDevice = bta.getRemoteDevice(macAddress);
BluetoothSocket tmp = null;
try {
    tmp = btDevice.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
} catch (IOException e) {
    e.printStackTrace();
}
if (tmp != null) {
    btSocket = tmp;
    bta.cancelDiscovery();

    try {
        btSocket.connect();
    } catch (IOException e) {
        try {
            Log.e(TAG, "------------- Close IOException");
            btSocket.close();
        } catch (IOException e2) {
            Log.e(TAG, "unable to close() socket during connection failure", e2);
        }
    }
}   

這是我也得到的錯誤:

ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Adapter:DeviceCreated from /org/bluez/14284/hci0
ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Adapter:PropertyChanged from /org/bluez/14284/hci0
ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/14284/hci0/dev_00_02_5B_00_A5_0B
ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/14284/hci0/dev_00_02_5B_00_A5_0B
DEBUG/BluetoothService(149): updateDeviceServiceChannelCache(00:02:5B:00:A5:0B)
DEBUG/BluetoothService(149):     uuid(application): 00001101-0000-1000-8000-00805f9b34fb 1
DEBUG/BluetoothService(149): Making callback for 00001101-0000-1000-8000-00805f9b34fb with result 1
VERBOSE/BluetoothEventRedirector(13691): Received android.bleutooth.device.action.UUID
ERROR/MainApp(14272): ------------- Close IOException
ERROR/BluetoothService.cpp(149): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
ERROR/BluetoothEventLoop.cpp(149): event_filter: Received signal org.bluez.Device:PropertyChanged from /org/bluez/14284/hci0/dev_00_02_5B_00_A5_0B
VERBOSE/BluetoothEventRedirector(13691): Received android.bleutooth.device.action.UUID

關於這個似乎是一個錯誤的一個奇怪的事情是,如果我運行此代碼並且它失敗了,那么我關閉藍牙並將其重新打開,設備顯示為在堆棧中配對。 據我了解,myTouch 上的藍牙芯片是 2.1,而我們嘗試連接的芯片是 1.2

我目前在某些手機上遇到藍牙問題(使用 SPP)。 您可以嘗試的一件事是在創建套接字時使用反射。

我在開發藍牙服務時使用了 Nexus S(我實際上使用的是 listenUsingRfcommWithServiceRecord 方法),它在該手機上運行良好。 也適用於索尼愛立信 Xperia ARC 和索尼愛立信 X10 Mini Pro。 它不適用於 HTC Wildfire (2.2.1)、HTC Legend (2.2) 和三星 Galaxy S (2.2.1)。

我還應該提到,我從中接收數據的設備也使用藍牙 1.2,就像你的一樣,所以這應該不是問題。

當我嘗試使用反射時,我突然在 Wildfire 上成功了,不幸的是,在 Legend 和 Galaxy S 上仍然沒有進展。這就是我卡住的地方。 許多論壇聲稱一些制造商擁有專有的藍牙堆棧,所以我想這就是導致這些問題的原因。 不管怎樣,祝你好運!

UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");

Method m = mAdapter.getClass().getMethod("createRfcommSocketToServiceRecord", new Class[] { UUID.class });
tmpSocket = (BluetoothServerSocket) m.invoke(mAdapter, new Object[] { MY_UUID });

再次,這似乎是該手機的藍牙中的一個錯誤,其他具有相同 BT 芯片和版本的手機沒有這個問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM