package com.clj.fastble; import android.content.Context; import android.content.pm.PackageManager; import com.clj.fastble.bluetooth.BleBluetooth; import com.clj.fastble.conn.BleCharacterCallback; import com.clj.fastble.conn.BleGattCallback; import com.clj.fastble.data.ScanResult; import com.clj.fastble.exception.BleException; import com.clj.fastble.exception.hanlder.DefaultBleExceptionHandler; import com.clj.fastble.scan.ListScanCallback; import com.clj.fastble.utils.BleLog; /** * Created by chenlijian on 2016/8/17. * BLE Manager */ public class BleManager { private Context mContext; private BleBluetooth bleBluetooth; private DefaultBleExceptionHandler bleExceptionHandler; public BleManager(Context context) { this.mContext = context; if (bleBluetooth == null) { bleBluetooth = new BleBluetooth(context); } bleExceptionHandler = new DefaultBleExceptionHandler(context); } /** * handle Exception Information */ public void handleException(BleException exception) { bleExceptionHandler.handleException(exception); } /** * scan device around */ public boolean scanDevice(ListScanCallback callback) { return bleBluetooth.startLeScan(callback); } /** * connect a searched device * * @param scanResult searched device * @param autoConnect * @param callback */ public void connectDevice(ScanResult scanResult, boolean autoConnect, BleGattCallback callback) { if (scanResult == null || scanResult.getDevice() == null) { if (callback != null) { callback.onNotFoundDevice(); } } else { if (callback != null) { callback.onFoundDevice(scanResult); } bleBluetooth.connect(scanResult, autoConnect, callback); } } /** * scan a known name device, then connect * * @param deviceName known name * @param time_out timeout * @param autoConnect * @param callback * @return */ public boolean scanNameAndConnect(String deviceName, long time_out, boolean autoConnect, BleGattCallback callback) { return bleBluetooth.scanNameAndConnect(deviceName, time_out, autoConnect, callback); } /** * scan known names device, then connect * * @param deviceNames known name * @param time_out timeout * @param autoConnect * @param callback * @return */ public boolean scanNamesAndConnect(String[] deviceNames, long time_out, boolean autoConnect, BleGattCallback callback) { return bleBluetooth.scanNameAndConnect(deviceNames, time_out, autoConnect, callback); } /** * fuzzy search name * * @param fuzzyName * @param time_out * @param autoConnect * @param callback * @return */ public boolean scanfuzzyNameAndConnect(String fuzzyName, long time_out, boolean autoConnect, BleGattCallback callback) { return bleBluetooth.scanNameAndConnect(fuzzyName, time_out, autoConnect, true, callback); } /** * fuzzy search name * * @param fuzzyNames * @param time_out * @param autoConnect * @param callback * @return */ public boolean scanfuzzyNamesAndConnect(String[] fuzzyNames, long time_out, boolean autoConnect, BleGattCallback callback) { return bleBluetooth.scanNameAndConnect(fuzzyNames, time_out, autoConnect, true, callback); } /** * scan a known mca device, then connect * * @param deviceMac known mac * @param time_out timeout * @param autoConnect * @param callback * @return */ public boolean scanMacAndConnect(String deviceMac, long time_out, boolean autoConnect, BleGattCallback callback) { return bleBluetooth.scanMacAndConnect(deviceMac, time_out, autoConnect, callback); } /** * cancel scan */ public void cancelScan() { bleBluetooth.cancelScan(); } /** * notify * * @param uuid_service * @param uuid_notify * @param callback * @return */ public boolean notify(String uuid_service, String uuid_notify, BleCharacterCallback callback) { return bleBluetooth.newBleConnector() .withUUIDString(uuid_service, uuid_notify, null) .enableCharacteristicNotify(callback, uuid_notify); } /** * indicate * * @param uuid_service * @param uuid_indicate * @param callback * @return */ public boolean indicate(String uuid_service, String uuid_indicate, BleCharacterCallback callback) { return bleBluetooth.newBleConnector() .withUUIDString(uuid_service, uuid_indicate, null) .enableCharacteristicIndicate(callback, uuid_indicate); } /** * write * * @param uuid_service * @param uuid_write * @param data * @param callback * @return */ public boolean writeDevice(String uuid_service, String uuid_write, byte[] data, BleCharacterCallback callback) { return bleBluetooth.newBleConnector() .withUUIDString(uuid_service, uuid_write, null) .writeCharacteristic(data, callback, uuid_write); } /** * read * * @param uuid_service * @param uuid_read * @param callback * @return */ public boolean readDevice(String uuid_service, String uuid_read, BleCharacterCallback callback) { return bleBluetooth.newBleConnector() .withUUIDString(uuid_service, uuid_read, null) .readCharacteristic(callback, uuid_read); } /** * get state */ public void getBluetoothState() { BleLog.i("ConnectionState: " + bleBluetooth.getConnectionState() + "\nisInScanning: " + bleBluetooth.isInScanning() + "\nisConnected: " + bleBluetooth.isConnected() + "\nisServiceDiscovered: " + bleBluetooth.isServiceDiscovered()); } /** * refresh Device Cache */ public void refreshDeviceCache() { bleBluetooth.refreshDeviceCache(); } /** * close gatt */ public void closeBluetoothGatt() { if (bleBluetooth != null) { bleBluetooth.clearCallback(); try { bleBluetooth.closeBluetoothGatt(); } catch (Exception e) { e.printStackTrace(); } } } /** * is support ble? */ public boolean isSupportBle() { return mContext.getApplicationContext() .getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE); } /** * open bluetooth */ public void enableBluetooth() { if (bleBluetooth != null) { bleBluetooth.enableBluetoothIfDisabled(); } } /** * close bluetooth */ public void disableBluetooth() { if (bleBluetooth != null) { bleBluetooth.disableBluetooth(); } } public boolean isBlueEnable() { return bleBluetooth != null && bleBluetooth.isBlueEnable(); } public boolean isInScanning() { return bleBluetooth.isInScanning(); } public boolean isConnectingOrConnected() { return bleBluetooth.isConnectingOrConnected(); } public boolean isConnected() { return bleBluetooth.isConnected(); } public boolean isServiceDiscovered() { return bleBluetooth.isServiceDiscovered(); } /** * remove callback form a character */ public void stopListenCharacterCallback(String uuid) { bleBluetooth.removeGattCallback(uuid); } /** * remove callback for gatt connect */ public void stopListenConnectCallback() { bleBluetooth.removeConnectGattCallback(); } /** * stop notify, remove callback */ public boolean stopNotify(String uuid_service, String uuid_notify) { boolean success = bleBluetooth.newBleConnector() .withUUIDString(uuid_service, uuid_notify, null) .disableCharacteristicNotify(); if (success) { bleBluetooth.removeGattCallback(uuid_notify); } return success; } /** * stop indicate, remove callback */ public boolean stopIndicate(String uuid_service, String uuid_indicate) { boolean success = bleBluetooth.newBleConnector() .withUUIDString(uuid_service, uuid_indicate, null) .disableCharacteristicIndicate(); if (success) { bleBluetooth.removeGattCallback(uuid_indicate); } return success; } }