如何从RedBearLab的聊天示例中获取mLeScanCallback中的rssi值?

时间:2016-06-28 07:07:40

标签: java android arduino bluetooth-lowenergy

我一直试图改变Android Studio中的RedBearLab聊天程序https://github.com/RedBearLab/Android/tree/master/Examples/Android%20Studio%20Examples/Chat,将我自己的数据发送到我的Arduino Uno上的BLE屏蔽。

虽然来自appstore的RedBearLab应用程序显示蓝牙低功能设备找到的设备的Rssi值,但Chat示例(只是您可以在appstore上获得的整个应用程序的一部分)仅显示设备名称和地址。

在查看几个不同的解决方案以获取rssi值之后,我发现有两种获取这些值的方法:
- 扫描具有lescan回调功能的设备时;
- 在手机和设备之间建立连接后。

现在我想知道的是如何从lescan回调函数中获取rssi值。我找到了不同的解决方案,其中值与设备名称一起发送到另一个函数(通常)是一个不同的类,它附加到文本字段。

当我知道这个值时,我想通过添加超过某个rssi值的设备来缩小应用找到的设备范围(让我们说低于-70也是如此)很远)。

私有BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback(){

private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {

    @Override
    public void onLeScan(final BluetoothDevice device, final int rssi,
            byte[] scanRecord) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (device != null) {
                    if (mDevices.indexOf(device) == -1)
                        mDevices.add(device);
                }
            }
        });
    }
};

上面的代码在Main.java中。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.device_list);

    setTitle("Device");

    listView = (ListView) findViewById(R.id.listView);

    devices = (ArrayList<BluetoothDevice>) Main.mDevices;
    for (BluetoothDevice device : devices) {
        map = new HashMap<String, String>();
        map.put(DEVICE_NAME, device.getName());
        map.put(DEVICE_ADDRESS, device.getAddress());
        listItems.add(map);
    }

    adapter = new SimpleAdapter(getApplicationContext(), listItems,
            R.layout.list_item, new String[] { "name", "address" },
            new int[] { R.id.deviceName, R.id.deviceAddr });
    listView.setAdapter(adapter);
    listView.setOnItemClickListener(this);
}

上面的代码在Device.java中。

我确定这里有人知道如何处理这个问题! 感谢您查看我的帖子,感谢任何阅读过帖子的人。

编辑:

我在youtube上找到了一个教程,他在Github上发布了他的代码,他使用了相同的BluetoothAdapter.LeScanCallback,但它有点不同。 https://github.com/kaviles/BLE_Tutorials/blob/master/Android/BLE_Tutorial_Final/app/src/main/java/android/kaviles/bletutorial/Scanner_BTLE.java

// Device scan callback.
private BluetoothAdapter.LeScanCallback mLeScanCallback =
        new BluetoothAdapter.LeScanCallback() {

            @Override
            public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {

                final int new_rssi = rssi;
                if (rssi > signalStrength) {
                    mHandler.post(new Runnable() {
                        @Override
                        public void run() {
                            ma.addDevice(device, new_rssi);
                        }
                    });
                }
            }
        };

所以我尝试将这个实现到RedBearLab的聊天代码中,但它没有工作,我也没有在youtube教程中了解它的工作原理。

1 个答案:

答案 0 :(得分:0)

查看stackoverflow,很可能问题已经得到解答。 how to get the rssi value for a bluetooth low energy device ?