Android BLE - 根据RSSI值

时间:2016-03-10 17:49:35

标签: java android bluetooth-lowenergy android-ble

我是Android和Java的新手,我不想放弃。我正在为此项目使用Android Studio样本进行BLE。 https://github.com/googlesamples/android-BluetoothLeGatt

如果有任何与我的目的相关的示例代码,以及任何建议,请指出我正确的方向。 :)

当RSSI值达到某个阈值 时,我想让手机振铃,振动并写入自定义特征 。它应该保持振铃,振动,除非我们按下StopRing或StopVibrate按钮。它应写入特征(如果阈值被破坏),以便另一个BLE设备可以读取特征并通过发出其蜂鸣器进行响应。

1)我阅读了一些示例代码,并了解了如何在单击按钮时使手机响铃,振动和写入(或停止这样做)。但是,现在我有一个定时器,有助于每隔10ms读取一次RSSI值,并且下面的updateRssi函数调用基本上更新了手机应用程序上显示的RSSI值。我可以在更新RSSI内部添加振动或振铃函数调用(如果RSSI< -threshold条件内部),但它会响铃/振动然后在完成铃声/振动模式之前停止。

在我们从GATT获取RSSI值后,如何继续检查RSSI值是否满足条件,然后分解为另一种无限期振铃和振动的方法? 我可以创建吗? if(RSSI< -threshold)条件内的意图?然后使应该执行上述操作的方法接收意图? (下面是DeviceControlActivity中消息处理程序的片段)

2)下面,我决定每次从Gatt服务器获取RSSI值时是否写入自定义特性。 RSSI值每10ms读取一次,因此只要RSSI值保持在阈值以上,就有可能调用写特征函数。在搜索论坛时,我听说他们说Android BLE堆栈不是很稳定,尤其是连续的特征写入。我的情况好吗?

非常感谢!

// Service message handler
//This message handler will be called when BluetoothLeService gets results back from the Gatt server.

private Handler mMessageHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        Bundle bundle;
        switch (msg.what) {
            case BluetoothLeService.GATT_SERVICES_DISCOVERED:
// start off the rssi reading timer
                DeviceControlActivity.this.startReadRssiTimer();
                break;
            case BluetoothLeService.GATT_DISCONNECT:
                break;
            case BluetoothLeService.GATT_REMOTE_RSSI:
                bundle = msg.getData();
                int rssi = bundle.getInt(BluetoothLeService.PARCEL_RSSI);
                DeviceControlActivity.this.updateRssi(rssi);
                if (rssi < - 80){
                    if(mBluetoothLeService!=null){
                        mBluetoothLeService.writeCustomCharacteristic(0xAA);
                    }
                }
                break;
        }
    }
};

编辑:我决定我可以停止计时器(停止读取新的RSSI并调用处理程序),然后继续让手机振动并响铃(直到按下布局上的按钮)。

EDIT2:其实我需要一个在后台运行的服务......

0 个答案:

没有答案