我一直试图改变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教程中了解它的工作原理。
答案 0 :(得分:0)
查看stackoverflow,很可能问题已经得到解答。 how to get the rssi value for a bluetooth low energy device ?