Android蓝牙BLE之RSSI数据的读写(1)

来源:互联网 发布:安卓黑科技软件网站 编辑:程序博客网 时间:2024/05/18 03:34

前段时间,一直在研究关于数据的传递方面的,后来否定了要用这些东西,而只是对于rssi的读写,以及BLE之间距离的判断,故,我把这几天的一些了解给写上,方便以后的,温故知新把,其实也没什么技术含量的东西。

原归正传,获取RSSI 无非就两种方法,一是在扫描回调时读取,二是在BLE连接之后读取,两种方法都比较简单,关键在于对蓝牙BLE的认识。


那我首先就介绍下在 扫描回调时怎么去读。

因为通常情况下,我们扫描时的设备及信息都是放在界面上,我就拿这个来说吧,  

以呈现在列表上为例,首先 适配器的创建

在创建适配器的时候,要加入 addDevice()方法

                        public  ArrayList<BluetoothDevice> mLeDevices;private LayoutInflater mInflator;private ArrayList<Integer> mRSSIs;private ArrayList<byte[]> mRecords;public MyAdapter() {super();mLeDevices = new ArrayList<BluetoothDevice>();mRSSIs = new ArrayList<Integer>();mRecords = new ArrayList<byte[]>();mInflator = MainActivity.this.getLayoutInflater();}public void addDevice(BluetoothDevice device,int rssi,byte[] scanRecord) {if (!mLeDevices.contains(device)) {if (mScanning) {mLeDevices.add(device);mRSSIs.add(rssi);mRecords.add(scanRecord);}}}
在getView里面添加如下(我的测试的,根据每个人的XML文件不同而适当修改)

ViewHolder holder;if (convertView == null) {Log.i("null", " " + position);holder = new ViewHolder();convertView = mInflator.inflate(R.layout.item, null);holder.deviceName = (TextView) convertView.findViewById(R.id.deviceName);holder.deviceAddress = (TextView) convertView.findViewById(R.id.deviceMac);holder.deviceRssi    = (TextView)convertView.findViewById(R.id.deviceRssi);convertView.setTag(holder);} else {Log.i("not-null", " " + position);holder = (ViewHolder) convertView.getTag();}BluetoothDevice device = mLeDevices.get(position);int rssi = mRSSIs.get(position);        String rssiString = (rssi == 0) ? "N/A" :"RSSI:"+ rssi + " db";final String deviceName = "设备名称:"+device.getName();if (deviceName != null && deviceName.length() > 0)holder.deviceName.setText(deviceName);    holder.deviceAddress.setText("MAC:"+device.getAddress());    holder.deviceRssi.setText(rssiString);      return convertView;}private class ViewHolder {TextView deviceName;TextView deviceAddress;TextView deviceRssi;}

最后 在回调方法中添加如下

myAdapter.addDevice(device,rssi,scanRecord);myAdapter.notifyDataSetChanged();

关键代码给出,大家自行添加修改

1 0