对移动开发中蓝牙温湿度源码的部分分析

一;MainActivity介绍
1;uuid介绍
对应gatt中Service的uuid
private static final String UUID_SERVICE = “0000fff0-0000-1000-8000-00805f9b34fb”;
对应gatt中Characteristic的uuid
private static final String UUID_CHAR6 = “00 00fff6-0000-1000-8000-00805f9b34fb”;
对应设备的uuid。
private static final String UUID_DESC = “00002902-0000-1000-8000-00805f9b34fb”;
2;private void bindView()绑定控件;
利用findViewById绑定ui中各个控件,其中有两个特殊的,一个是ToggleButton按钮,存在两个状态事件的按钮,二个是ListView设备显示列表。具体的介绍ui时在解释。
3;private void initData()初始化数据
对接收的字符串初始化为“”,并且对listview适配器进行加载,
4;private void initEvent()初始化事件
4.1;因为该工程中存在从BLE中读取数据并更新ui界面,并且读取数据是个耗时过程,因此要是用子线程,注意子线程中要改变ui界面,因此要使用到Handle和TimerTask和Timer是为了进行定时进行数据更新,
并且可以达到子线程拿数据放回主线程修改ui界面。
Handler的时候只需在主线程创建一个handler对象,在子线程通过在主线程创建的handler对象发送Message,在handleMessage()方法中接受这个Message对象进行处理。通过handler很容易的从子线程切换回主线程了。
 Timer类是一种线程设施,可以用来实现某一个时间或某一段时间后安排某一个任务执行一次或定期重复执行。该功能和TimerTask配合使用。TimerTask类用于实现由Timer安排的一次或重复执行的某个任务。void schedule(TimerTask task, long delay, long period) 安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
就是利用它们完成对 设备BLE发送读取数据命令和数据内容,以完成后续读取数据更新ui的监听事件。
4.2:两个点击事件,一个是ToggleButton按钮的扫描设备和停止扫描设备。还有一个是listView的点击事件,进行设备的连接或者断开。
4.2.1;扫描设备,当扫描到设备时回调的事件;
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
runOnUiThread(new Runnable() {
public void run() {
//在里面进行 对listView的一些简单操作。

5;获取BLE实例,然后开启监听事件,发现BLE终端的Service和收到BLE终端数据交互。
5.1;获取BLE实例;mBLE = new BluetoothLeClass(this);其中BluetoothLeClass是自己定义的类。为了给蓝牙设备GATT服务器为管理连接和数据通信做服务用的。
5.2;发现BLE终端的Service时回调mBLE.setOnServiceDiscoverListener(mOnServiceDiscover);
搜索到BLE终端服务的监听事件
private BluetoothLeClass.OnServiceDiscoverListener mOnServiceDiscover = new OnServiceDiscoverListener() {
public void onServiceDiscover(BluetoothGatt gatt) {
//在里面找到Service和Characteristic
//找到Sercice则说明进行了连接。
}
}
5.3; 收到BLE终端数据交互的事件mBLE.setOnDataAvailableListener(mOnDataAvailable);
收到BLE终端数据交互的监听事件
private BluetoothLeClass.OnDataAvailableListener mOnDataAvailable = new OnDataAvailableListener() {
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
//BLE终端数据被读的事件
}
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
//收到BLE终端写入数据回调
//byte[] readBuff = characteristic.getValue();获取数据。
}
}
二;LeDeviceListAdapter对listView的一些基本操作类,继承BaseAdapter
1;LayoutInflater;//LayoutInflater技术广泛应用于需要动态获取View
注意创建LayoutInflater实例时需要context因此这个类需要传入形参。
mInflator = mContext.getLayoutInflater();获取实例‘
view = mInflator.inflate(R.layout.listitem_device, null);动态获取控件
2;因为listView是由两部分组成地址和设备,因此我们封装了一个内部类。

三;BluetoothLeClass类,自己定义的一个类,
作用就是通过一个 托管在一个给定的蓝牙设备GATT服务器为管理连接和数据通信做服务 ;
1;接口内嵌。定义回调控制类
自定义接口。监听的回调接口
1.1;定义回调接口
public interface OnConnectListener {
//调用在BluetoothGattCallback的回调方法onConnectionStateChange中。
public void onConnect(BluetoothGatt gatt);
}等等;
1.2;定义回调实现类对象
private OnConnectListener mOnConnectListener;
1.3;获取回调实现类对象
public void setOnConnectListener(OnConnectListener l) {
mOnConnectListener = l;
}
1.4;实现回调方法,在private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback()的一些重写方法中实现回调方法,

2;其余都是对Gatt的一些操作。

你可能感兴趣的:(安卓学习)