蓝牙连接:Android

时间:2019-01-08 11:19:06

标签: android bluetooth uuid android-bluetooth

在我的应用中,我有一个活动可以扫描并连接到蓝牙设备。首先,它启用蓝牙,开始发现,并将所有发现的设备添加到列表中。当用户单击这些设备之一时,如果未配对该设备,则该应用会尝试配对该设备。到目前为止,一切都很好。完全没有问题。

如果所选设备已经配对,则必须连接到该设备。即,用户单击蓝牙扬声器,我的应用程序应建立连接。经过一些挖掘,我使用 BluetoothA2DP

连接了扬声器
bluetoothAdapter.getProfileProxy(this, new BluetoothProfile.ServiceListener() {

    @Override
    public void onServiceConnected(int i, BluetoothProfile bluetoothProfile) {
    }

    @Override
    public void onServiceDisconnected(int i) {
    }
}, BluetoothProfile.A2DP);

问题是,A2DP连接对其他蓝牙设备(例如智能手机,蓝牙打印机,蓝牙键盘等)无效。因此,如果用户单击其中一个设备,则连接将失败。 如何连接到这些设备?

我看过一些RfCommSocket连接教程。但是有一个困惑,我的设备是客户端还是服务器? RfComm是要走的路吗?根据{{​​3}}的另一个问题,“如果没有蓝牙套接字在其他设备上监听,而UUID完全相同,您将无法共享数据” ,这是否意味着我的应用程序和我尝试连接的设备,应该以某种方式共享相同的UUID吗?那怎么可能?

我看了android.bluetooth.BluetoothSocket类。列出了其他一些套接字

/** RFCOMM socket */
public static final int TYPE_RFCOMM = 1;

/** SCO socket */
public static final int TYPE_SCO = 2;

/** L2CAP socket */
public static final int TYPE_L2CAP = 3;

/** L2CAP socket on BR/EDR transport
 * @hide
 */
public static final int TYPE_L2CAP_BREDR = TYPE_L2CAP;

/** L2CAP socket on LE transport
 * @hide
 */
public static final int TYPE_L2CAP_LE = 4;

this answer列出了许多不同类型的设备。但是没有信息说明如何连接这些设备。

当连接到蓝牙设备时,别人怎么知道要建立哪个连接?

注意:我很确定我在这个问题上说了一些愚蠢的话。我对蓝牙知之甚少

0 个答案:

没有答案