Android:三星S6的蓝牙断开连接(Android版:棒棒糖)

时间:2016-03-10 06:47:24

标签: android bluetooth

我在三星S6手机上开发了一个Android应用程序(Android版: - Lollipop)。 应用程序读取蓝牙端口上的数据并显示在屏幕上。

但是,蓝牙连接会在一段时间后丢失。 之后,蓝牙连续断开连接。

连接日志是: -

03-05 15:34:57.071:E / bt-btm(6152):重置sec_bd_name和name flag。 (BR / EDR链接)

03-05 15:34:57.071:E / bt-btm(6152):btm_sec_disconnected - 清除未决标志

无效的rfc广告位ID:91

03-05 16:37:42.490:W / bt-btif(6113):dm_pm_timer到期

03-05 16:37:42.490:W / bt-btif(6113):dm_pm_timer expires 0

03-05 16:37:42.490:W / bt-btif(6113):proc dm_pm_timer expires

当我重新启动手机时,一切正常。但问题会在一段时间后再次出现。

为什么会这样?如何在不断开连接的情况下保持连接?

编辑: - 我已经在多个版本的Android设备上测试了我的应用程序,除了三星S6之外,它在所有其他设备上都能正常工作。

1 个答案:

答案 0 :(得分:1)

在一段固定的空闲时间后,蓝牙将自动断开连接。如果你使用普通的蓝牙外设,你就无所事事了。

要保持与蓝牙的持续连接,您需要检查应用程序中的空闲时间,并在一段固定的时间后通过OutputStream发送垃圾数​​据。虽然这不是一个很好的方法,但可以很好地保持与蓝牙的连续连接。

你可以选择另一种可能会冻结你的应用程序的方法,每次蓝牙断开连接时都会创建一个rfcommSocket通信。当您注册BluetoothAdapter以收听蓝牙通信状态时,您将获得断开连接意图。在这种方法中,您需要知道蓝牙设备的MAC地址。以下是如何创建rfcommSocket通信的示例:

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

BroadcastReceiver的蓝牙意图过滤器中:

BluetoothDevice mDevice;
BluetoothSocket bs;

if (BluetoothDevice.ACTION_FOUND.equals(action)) {
    BluetoothDevice device = (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

    if (device.getAddress().equals(YOUR_BT_MAC_ADDRESS)) {
        mDevice = device;
        bs = mDevice.createRfcommSocketToServiceRecord(MY_UUID);
        mBluetoothAdapter.cancelDiscovery();
    }

}

if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
    try {
        bs = mDevice.createRfcommSocketToServiceRecord(MY_UUID); 
    } catch (IOException e) {}
}

如果这与内存问题有关,请检查您的InputStreamOutputStream。从InputStream读取,直到它没有被清除。