private static final String TAG = BleCallback.class.getSimpleName();
/**
-
连接状态改变回调
-
@param gatt gatt
-
@param status gatt连接状态
-
@param newState 新状态
*/
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
if (status == BluetoothGatt.GATT_SUCCESS) {
switch (newState) {
case BluetoothProfile.STATE_CONNECTED://连接成功
Log.d(TAG, “连接成功”);
break;
case BluetoothProfile.STATE_DISCONNECTED://断开连接
Log.e(TAG, “断开连接”);
break;
default:
break;
}
} else {
Log.e(TAG, "onConnectionStateChange: " + status);
}
}
}
为了区别于上一篇文章,我这里会新建一个DataExchangeActivity来做数据的交互,不会影响到上一篇文章的内容。然后在MainActivity,点击列表item时调用的connectDevice方法中跳转到DataExchangeActivity中,通过传递蓝牙对象过去。
接下来看看DataExchangeActivity中做了什么?
public class DataExchangeActivity extends AppCompatActivity {
private static final String TAG = DataExchangeActivity.class.getSimpleName();
/**
- Gatt
*/
private BluetoothGatt bluetoothGatt;
/**
- 设备是否连接
*/
private boolean isConnected = false;
/**
- Gatt回调
*/
private BleCallback bleCallback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_data_exchange);
//初始化
bleCallback = new BleCallback();
//获取上个页面传递过来的设备
BluetoothDevice device = getIntent().getParcelableExtra(“device”);
//连接gatt 设置Gatt回调
bluetoothGatt = device.connectGatt(this, false, bleCallback);
}
/**
- 断开设备连接
*/
private void disconnectDevice() {
if (isConnected && bluetoothGatt != null) {
bluetoothGatt.disconnect();
}
}
/**
-
Toast提示
-
@param msg 内容
*/
private void showMsg(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
}
很简单这个代码,就是接收上个页面传递过来的蓝牙对象,然后进行gatt连接。直接传入实例化之后的bleCallback即可,请注意关于gatt的处理都是在子线程中进行的,可以验证一下:
运行一下,进入交互页面。
下面进行GattCallback中的API介绍。
1. onPhyUpdate
/**
-
物理层改变回调
-
@param gatt gatt
-
@param txPhy 发送速率 1M 2M
-
@param rxPhy 接收速率 1M 2M
-
@param status 更新操作的状态
*/
@Override
public void onPhyUpdate(BluetoothGatt gatt, int txPhy, int rxPhy, int status) {
super.onPhyUpdate(gatt, txPhy, rxPhy, status);
}
通过gatt.setPreferredPhy()方法触发,例如:
//设置 2M
gatt.setPreferredPhy(BluetoothDevice.PHY_LE_2M, BluetoothDevice.PHY_LE_2M, BluetoothDevice.PHY_OPTION_NO_PREFERRED);
2. onPhyRead
/**
-
读取物理层回调
-
@param gatt gatt
-
@param txPhy 发送速率 1M 2M
-
@param rxPhy 接收速率 1M 2M
-
@param status 更新操作的状态
*/
@Override
public void onPhyRead(