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

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

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


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

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

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

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

                        public  ArrayList mLeDevices;
			private LayoutInflater mInflator;
			private ArrayList mRSSIs;
			private ArrayList mRecords;

			public MyAdapter() {
				super();
				mLeDevices = new ArrayList();
				mRSSIs = new ArrayList();
				mRecords = new ArrayList();
				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();

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

你可能感兴趣的:(bluetooth)