package com.clj.blesample.demo; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothGatt; import android.bluetooth.BluetoothGattCharacteristic; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import com.clj.blesample.R; import com.clj.fastble.BleManager; 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.scan.ListScanCallback; import com.clj.fastble.utils.HexUtil; /** * 代码示范 */ public class CodeDemoActivity extends AppCompatActivity { // 下面的所有UUID及指令请根据实际设备替换 private static final String UUID_SERVICE = "00000000-0000-0000-8000-00805f9b0000"; private static final String UUID_INDICATE = "0000000-0000-0000-8000-00805f9b0000"; private static final String UUID_NOTIFY = "00000000-0000-0000-8000-00805f9b0000"; private static final String UUID_WRITE = "00000000-0000-0000-8000-00805f9b0000"; private static final String UUID_READ = "00000000-0000-0000-8000-00805f9b0000"; private static final String SAMPLE_WRITE_DATA = "000000000000000"; // 要写入设备某一个character的指令 private static final long TIME_OUT = 5000; // 扫描超时时间 private static final String DEVICE_NAME = "这里写你的设备名"; // 符合连接规则的蓝牙设备名 private static final String[] DEVICE_NAMES = new String[]{}; // 符合连接规则的蓝牙设备名 private static final String DEVICE_MAC = "这里写你的设备地址"; // 符合连接规则的蓝牙设备地址 private static final String TAG = "ble_sample"; private BleManager bleManager; // Ble核心管理类 private ScanResult scanResult; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_demo); bleManager = new BleManager(this); bleManager.enableBluetooth(); } /**************************************user's operate****************************************/ /** * 判断是否支持ble */ private boolean isSupportBle() { return bleManager.isSupportBle(); } /** * 手动开启蓝牙 */ private void enableBlue() { bleManager.enableBluetooth(); } /** * 手动关闭蓝牙 */ private void disableBlue() { bleManager.disableBluetooth(); } /** * 刷新缓存操作 */ private void refersh() { bleManager.refreshDeviceCache(); } /** * 关闭操作 */ private void close() { bleManager.closeBluetoothGatt(); } /** * 扫描出周围所有设备 */ private void scanDevice() { bleManager.scanDevice(new ListScanCallback(TIME_OUT) { @Override public void onScanning(ScanResult result) { scanResult = result; } @Override public void onScanComplete(ScanResult[] results) { } }); } /** * 当搜索到周围有设备之后,可以选择直接连某一个设备 */ private void connectDevice() { bleManager.connectDevice(scanResult, true, new BleGattCallback() { @Override public void onNotFoundDevice() { Log.i(TAG, "未发现设备"); } @Override public void onFoundDevice(ScanResult scanResult) { Log.i(TAG, "发现设备: " + scanResult.getDevice().getAddress()); } @Override public void onConnectSuccess(BluetoothGatt gatt, int status) { Log.i(TAG, "连接成功"); gatt.discoverServices(); } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { Log.i(TAG, "发现服务"); bleManager.getBluetoothState(); } @Override public void onConnectFailure(BleException exception) { Log.i(TAG, "连接断开:" + exception.toString()); bleManager.handleException(exception); } }); } /** * 扫描指定广播名的设备,并连接(唯一广播名) */ private void scanAndConnect1() { bleManager.scanNameAndConnect( DEVICE_NAME, TIME_OUT, false, new BleGattCallback() { @Override public void onNotFoundDevice() { Log.i(TAG, "未发现设备"); } @Override public void onFoundDevice(ScanResult scanResult) { Log.i(TAG, "发现设备: " + scanResult.getDevice().getAddress()); } @Override public void onConnectSuccess(BluetoothGatt gatt, int status) { gatt.discoverServices(); Log.i(TAG, "连接成功"); } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { Log.i(TAG, "发现服务"); } @Override public void onConnectFailure(BleException exception) { Log.i(TAG, "连接中断:" + exception.toString()); } }); } /** * 扫描指定广播名的设备,并连接(模糊广播名) */ private void scanAndConnect2() { bleManager.scanfuzzyNameAndConnect( DEVICE_NAME, TIME_OUT, false, new BleGattCallback() { @Override public void onNotFoundDevice() { Log.i(TAG, "未发现设备"); } @Override public void onFoundDevice(ScanResult scanResult) { Log.i(TAG, "发现设备: " + scanResult.getDevice().getAddress()); } @Override public void onConnectSuccess(BluetoothGatt gatt, int status) { gatt.discoverServices(); Log.i(TAG, "连接成功"); } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { Log.i(TAG, "发现服务"); } @Override public void onConnectFailure(BleException exception) { Log.i(TAG, "连接中断:" + exception.toString()); } }); } /** * 扫描指定广播名的设备,并连接(多个广播名) */ private void scanAndConnect3() { bleManager.scanNamesAndConnect( DEVICE_NAMES, TIME_OUT, false, new BleGattCallback() { @Override public void onNotFoundDevice() { Log.i(TAG, "未发现设备"); } @Override public void onFoundDevice(ScanResult scanResult) { Log.i(TAG, "发现设备: " + scanResult.getDevice().getAddress()); } @Override public void onConnectSuccess(BluetoothGatt gatt, int status) { gatt.discoverServices(); Log.i(TAG, "连接成功"); } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { Log.i(TAG, "发现服务"); } @Override public void onConnectFailure(BleException exception) { Log.i(TAG, "连接中断:" + exception.toString()); } }); } /** * 扫描指定广播名的设备,并连接(模糊、多个广播名) */ private void scanAndConnect4() { bleManager.scanfuzzyNamesAndConnect( DEVICE_NAMES, TIME_OUT, false, new BleGattCallback() { @Override public void onNotFoundDevice() { Log.i(TAG, "未发现设备"); } @Override public void onFoundDevice(ScanResult scanResult) { Log.i(TAG, "发现设备: " + scanResult.getDevice().getAddress()); } @Override public void onConnectSuccess(BluetoothGatt gatt, int status) { gatt.discoverServices(); Log.i(TAG, "连接成功"); } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { Log.i(TAG, "发现服务"); } @Override public void onConnectFailure(BleException exception) { Log.i(TAG, "连接中断:" + exception.toString()); } }); } /** * 扫描指定物理地址的设备,并连接 */ private void scanAndConnect5() { bleManager.scanMacAndConnect( DEVICE_MAC, TIME_OUT, false, new BleGattCallback() { @Override public void onNotFoundDevice() { Log.i(TAG, "未发现设备"); } @Override public void onFoundDevice(ScanResult scanResult) { Log.i(TAG, "发现设备: " + scanResult.getDevice().getAddress()); } @Override public void onConnectSuccess(BluetoothGatt gatt, int status) { gatt.discoverServices(); Log.i(TAG, "连接成功"); } @Override public void onServicesDiscovered(BluetoothGatt gatt, int status) { Log.i(TAG, "发现服务"); } @Override public void onConnectFailure(BleException exception) { Log.i(TAG, "连接中断:" + exception.toString()); } }); } /** * 取消搜索 */ private void cancelScan() { bleManager.cancelScan(); } /** * notify */ private void listen_notify() { bleManager.notify( UUID_SERVICE, UUID_NOTIFY, new BleCharacterCallback() { @Override public void onSuccess(BluetoothGattCharacteristic characteristic) { } @Override public void onFailure(BleException exception) { } }); } /** * stop notify */ private boolean stop_notify() { return bleManager.stopNotify(UUID_SERVICE, UUID_NOTIFY); } /** * indicate */ private void listen_indicate() { bleManager.indicate( UUID_SERVICE, UUID_INDICATE, new BleCharacterCallback() { @Override public void onSuccess(BluetoothGattCharacteristic characteristic) { } @Override public void onFailure(BleException exception) { } }); } /** * stop indicate */ private boolean stop_indicate() { return bleManager.stopIndicate(UUID_SERVICE, UUID_INDICATE); } /** * write */ private void write() { bleManager.writeDevice( UUID_SERVICE, UUID_WRITE, HexUtil.hexStringToBytes(SAMPLE_WRITE_DATA), new BleCharacterCallback() { @Override public void onSuccess(BluetoothGattCharacteristic characteristic) { } @Override public void onFailure(BleException exception) { } }); } /** * read */ private void read() { bleManager.readDevice( UUID_SERVICE, UUID_READ, new BleCharacterCallback() { @Override public void onSuccess(BluetoothGattCharacteristic characteristic) { } @Override public void onFailure(BleException exception) { } }); } }