android - 实时测量蓝牙信号强度 (RSSI)

标签 android timer bluetooth refresh discovery

我希望能够手持 Android 设备在房间内走动,单击显示房间 1 的按钮,然后开始发现我周围的蓝牙设备并获取它们的 RSSI 值。然后我想将此信息保存为文本文件。然后对不同的房间重复。

这是简单的部分。

我遇到麻烦的部分是找出如何(或如果可能的话)执行此操作,但要设置计时器,这样发现过程不一定会自行完成,但是所以我可以定时自行重复开始和停止发现以获得新值,直到我完成。大多数接近的值通常会在大约 5 秒左右的时间内出现,对于我目前正在尝试做的事情,我很满意。 我找到了 this问题,但没有答案。

为了让它更清楚一点,一个简单的例子是:

  • 按“房间 1”按钮
  • 开始发现
  • 5 秒后,停止发现并重新开始
  • 一遍又一遍地这样做,直到……
  • 按下“停止”按钮

有人知道这是否可行吗?如果是这样,最好的方法是什么? 我查看了 Timer 和 TimerTask,它们看起来很有用。

此外,在我开始深入研究之前,我会问一些问题,因为在 n 不得不回到开始之前我已经这样做了。 :(

谢谢

最佳答案

你可以使用这样的东西:

private void start() {
    mBluetoothAdapter.startDiscovery();
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (mBluetoothAdapter.isDiscovering())
                mBluetoothAdapter.cancelDiscovery();
            if (repeat) start();                
        } }, 5000);
}

创建一个由停止按钮设置为 false 的变量 repeat。开始按钮将 repeat 设置为 true 并调用 start()。

据我所知,蓝牙发现会无限期运行,因此您无需停止并重新启动它。

关于android - 实时测量蓝牙信号强度 (RSSI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15649141/

相关文章:

android - 在 RemoteViews 中旋转图像?

android - ViewHolder Android 的 onTouch 方法

java - 如何在后台正确使用 Android 的 HTTP POST 方法

android - 蓝牙发现与连接

android - Xamarin 蓝牙输入流未读取所有字节(有时)

java - 检测电池充电 Android

java - 如何停止正在运行的 TimerTask

flutter - 如何在 Flutter App 中按时间注销?

Javascript 计时器返回 NaN

swift - Swift 中蓝牙读取的 Characteristic.value