Android 蓝牙:是不是已连接?

Posted

技术标签:

【中文标题】Android 蓝牙:是不是已连接?【英文标题】:Android Bluetooth: IsConnected?Android 蓝牙:是否已连接? 【发布时间】:2010-08-17 21:23:54 【问题描述】:

有没有办法确定您是否连接到蓝牙设备?

我的应用程序连接、发送/接收都很好。但是我需要一种方法来查看我是否仍然连接说..如果我走出范围并回到范围内。

我注意到蓝牙套接字中没有 isConnected 函数,就像在 TCP 东西中一样...有没有办法查看您是否已连接,或者与您应该连接的设备通信?

【问题讨论】:

【参考方案1】:

我能够解决此问题的唯一方法是每秒发送一次“心跳”消息。如果它没有通过,那么我认为蓝牙已断开连接。

【讨论】:

【参考方案2】:

发送尽可能少的数据,看看是否得到响应。如果你没有,那么你没有连接。

【讨论】:

【参考方案3】:

当任何 BT 设备断开连接时,以下广播接收器值会告诉您:

intentFilter.addAction(BluetoothDevice.ACTION_ACL_CONNECTED); // API 5
intentFilter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED); // API 5

如果您对特定设备感兴趣,您可能应该实现一个 BluetoothProfile.ServiceListener 代理侦听器:

private class MyBluetoothHeadsetListener //
                implements BluetoothProfile.ServiceListener

    @Override
    public void onServiceDisconnected(int profile)
    
    

    @Override
    public void onServiceConnected(int profile, BluetoothProfile proxy)
    
        if (profile == BluetoothProfile.A2DP)
        
            BluetoothA2dp bluetoothA2dp = (BluetoothA2dp) proxy;
            mDevicesA2dp = bluetoothA2dp.getConnectedDevices();
            for (BluetoothDevice deviceA2dp : mDevicesA2dp)
            
                boolean isA2dpPlaying = bluetoothA2dp.isA2dpPlaying(deviceA2dp);
            
            return;
        

        if (profile == BluetoothProfile.HEADSET)
        
            BluetoothHeadset bluetoothHeadset = (BluetoothHeadset) proxy;
            mDevicesNonA2dp = bluetoothHeadset.getConnectedDevices();
            if (mDevicesNonA2dp.size() > 0)
            
                for (BluetoothDevice deviceNonA2dp : mDevicesNonA2dp)
                
                    BluetoothClass bluetoothClass = deviceNonA2dp.getBluetoothClass();
                    String bluetoothDeviceClass = bluetoothClassToString(bluetoothClass);
                    boolean isAudioConnected = bluetoothHeadset.isAudioConnected(deviceNonA2dp);
                
            
            return;
        
    


...

private MyBluetoothHeadsetListener mProfileListener = new MyBluetoothHeadsetListener();

...

BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
adapter.getProfileProxy(mApp, mProfileListener, BluetoothProfile.HEADSET);
adapter.getProfileProxy(mApp, mProfileListener, BluetoothProfile.A2DP);

【讨论】:

以上是关于Android 蓝牙:是不是已连接?的主要内容,如果未能解决你的问题,请参考以下文章

android的蓝牙匹配连接

android 获取蓝牙已连接设备

android中怎样判断蓝牙是不是连接

Android 蓝牙开发-打开蓝牙后能不能立即连接固定地址的蓝牙设备??还是需要进行判断啥的?

在 Android Studio 中读取已连接蓝牙低功耗设备的 RSSI 值

Android蓝牙协议-蓝牙配对与连接