使用注意事项:
1.单例模式,直接getInstance()获取对象。
2.使用前需要init()。
3.回调分为两部分,一部分扫描,一部分连接:
public void setOnBleCallback(OnBleCallback onBleCallback)
public void setOnBleConnectCallback(OnBleCallback onBleConnectCallback)
4.读写间隔:
读写操作都是队列操作,需要等待操作结果返回后,才能进行下次操作,若当次操作未完成,下次操作调用时,将直接返回操作启用失败。
写入操作时,需等待服务器的确认信息,即写入回调,再进行下次写入操作。
当写入类型设置为 不需要接收服务器确认信息(PROPERTY_WRITE_NO_RESPONSE)以加快传输速度时,两次操作之间应保留 80ms ~ 100ms 或以上的延时。
5.权限,主要为蓝牙开关权限和定位权限,高版本记得动态申请:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
6.动态申请:
/**
* 检查蓝牙权限和定位权限
*/
private void checkPermission() {
PermissionX.init(this)
.permissions(Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.BLUETOOTH_ADMIN)
.onExplainRequestReason(new ExplainReasonCallback() {
@Override
public void onExplainReason(ExplainScope scope, List<String> deniedList) {
scope.showRequestReasonDialog(deniedList,
"你需要同意以下权限才能正常使用",
"确认","取消");
}
})
.request(new RequestCallback() {
@Override
public void onResult(boolean allGranted, List<String> grantedList, List<String> deniedList) {
if (allGranted){
Toast.makeText(mActivity,"权限已通过",Toast.LENGTH_SHORT).show();
mFirstDeviceListBean.setCheckStatus(true);
registerBroadcastReceiver(mActivity);
BleUtils.getInstance().init(mActivity);
}else {
String nonePermission = deniedList.toString();
Toast.makeText(mActivity,"权限未通过"+nonePermission,Toast.LENGTH_SHORT).show();
}
}
});
}
7.监听蓝牙开关的广播:
private void registerBroadcastReceiver(Context context) {
IntentFilter intentFilter = new IntentFilter();
// 监视蓝牙关闭和打开的状态
intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
context.registerReceiver(stateChangeReceiver, intentFilter);
}
private BroadcastReceiver stateChangeReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int blueState = intent.getIntExtra(BluetoothAdapter