gpt4 book ai didi

android - 检测蓝牙设备断开

转载 作者:行者123 更新时间:2023-11-30 03:49:55 25 4
gpt4 key购买 nike

我正在尝试确定是否可以可靠地检测到与(非音频)设备的蓝牙连接何时丢失。 Android SDK 提供了一个蓝牙聊天示例,它使用了这个 fragment :

public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
byte[] buffer = new byte[1024];
int bytes;

// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);

// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
}

当我启动线程并在 12 小时后不使用该应用程序(该服务在后台运行)断开设备连接时,这种方法有多可靠。当然,服务总是可以被终止?

然后是广播。我的应用程序会一直收到这些广播吗?什么时候不会?我已经尝试通过在 AndroidManifest 中使用它来实现它:

    <receiver android:name="MyReceiver" >
<intent-filter>
<action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
</intent-filter>
</receiver>

我在短时间内测试了这两种方法,并且都有效。如前所述,当手机长时间闲置时,我不确定这些是否可靠。

谁能阐明这一点?

最佳答案

蓝牙中的每个 Activity 都有一个与之关联的超时。它因设备而异。

只要您启用蓝牙服务,它就会在后台运行。 ACL [Asynchronous Connection Less] 数据包一般用于传输非语音相关的数据。 ACL 就像两个蓝牙设备之间的连接 channel 。这可能会根据不活动计时器或超时值断开连接。

您可以读取调用HCI createConnection API 时设置的连接超时时间。可以通过执行hcidump 工具获取此信息。http://www.bluez.org/download/

关于android - 检测蓝牙设备断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14316925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com