package com.sirius.botasky.bledemo; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothGattCharacteristic; import android.bluetooth.BluetoothGattService; import android.content.Context; import com.sirius.botasky.bledemo.callbacks.ConnectResultCallback; import com.sirius.botasky.bledemo.callbacks.OperationResultCallback; import com.sirius.botasky.cyberble.ble.BleAdmin; import com.sirius.botasky.cyberble.ble.BleDeviceService; import com.sirius.botasky.cyberble.callback.DeviceConnectStateCallback; import com.sirius.botasky.cyberble.callback.DeviceOperationCallback; import com.sirius.botasky.cyberble.callback.ScanCallback; import java.util.List; import java.util.UUID; /** * Created by botasky on 28/04/2017. */ public class BleManager { private static BleAdmin mBleAdmin; private static BleManager mInstance; private static Context mContext; private String mCurrentConnectAddress; private DeviceConnectStateCallback mDeviceConnectStateCallback = new DeviceConnectStateCallback() { @Override public void onDeviceConnected(String address) { mConnectResultCallback.connectResult("地址:" + address + "连接成功", true); } @Override public void onDeviceDisconnected(String address) { mConnectResultCallback.connectResult("地址:" + address + "断开连接", false); } }; private DeviceOperationCallback mDeviceOperationCallback = new DeviceOperationCallback() { @Override public void onDeviceServiceDiscover(boolean isSuccess, String deviceAddress, List<BluetoothGattService> services) { mOperationResultCallback.onDeviceDiscoverService(deviceAddress, services); } @Override public void onDeviceCharacteristicRead(boolean isSuccess, String deviceAddress, BluetoothGattCharacteristic characteristic) { mOperationResultCallback.onDeviceReadResult(deviceAddress, characteristic); } @Override public void onDeviceCharacteristicWrite(boolean isSuccess, String deviceAddress, BluetoothGattCharacteristic characteristic) { mOperationResultCallback.onDeviceWriteResult(deviceAddress, isSuccess); } @Override public void onDeviceCharacteristicNotify(String deviceAddress, BluetoothGattCharacteristic characteristic) { mDeviceOperationCallback.onDeviceCharacteristicNotify(deviceAddress, characteristic); } }; private ConnectResultCallback mConnectResultCallback; private OperationResultCallback mOperationResultCallback; public void setmConnectResultCallback(ConnectResultCallback mConnectResultCallback) { this.mConnectResultCallback = mConnectResultCallback; } public void setmOperationResultCallback(OperationResultCallback mOperationResultCallback) { this.mOperationResultCallback = mOperationResultCallback; } public static BleManager getInstance() { if (mInstance == null) { mInstance = new BleManager(); } return mInstance; } public static void init(Context context) { mContext = context; mBleAdmin = new BleAdmin(mContext); } public void startScan(ScanCallback scanCallback) { mBleAdmin.openBle(); mBleAdmin.startScanAllDevice(scanCallback); } public void stopScan() { mBleAdmin.stopScan(); } public void connect(BluetoothDevice device) { mCurrentConnectAddress = device.getAddress(); mBleAdmin.connectDevice(device); mBleAdmin.stopScan(); mBleAdmin.setCallbacks(mDeviceOperationCallback, mDeviceConnectStateCallback); } public void disconnect(){ mBleAdmin.disconnectDevice(mCurrentConnectAddress); mCurrentConnectAddress = ""; } public void discoverCurrentDeviceServices(){ mBleAdmin.discoverDeviceServices(mCurrentConnectAddress); } public void startReadCharacteristic(UUID uuid){ mBleAdmin.processDeviceService(new BleDeviceService(mCurrentConnectAddress, uuid, BleDeviceService.OperateType.Read)); } public void startNotifyCharacteristic(UUID uuid){ mBleAdmin.processDeviceService(new BleDeviceService(mCurrentConnectAddress, uuid, BleDeviceService.OperateType.Notify)); } }