Android BLE开发入门到进阶(二)

通信流程

1.主设备APP扫描,搜索外围智能设备
2.建立BLE蓝牙连接
3.基于BLE蓝牙连接 进行数据通信

第一步 加权限,如果是6.0以上就自己手动去申请权限
主设备Android4.3+(API Level>=18)
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
第二步 获得蓝牙adapter
BluetoothManager bluetoothManager = (BluetoothManager)this.getSystemService(Context.BLUETOOTH_SERVICE); BluetoothAdapter mBtAdapter = bluetoothManager.getAdapter();

第三步 开始扫描
// 10秒后停止查找搜索.
private static final long SCAN_PERIOD = 10000;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mBtAdapter .stopLeScan(DeviceScanActivity.this.mLeScanCallback);
invalidateOptionsMenu();
}
}, SCAN_PERIOD);
mBtAdapter .startLeScan(DeviceScanActivity.this.mLeScanCallback);
扫描的结果通过这个mLeScanCallback接口回调返回

// 搜索到设备信息更新到主线程来更新UI界面
private BluetoothAdapter.LeScanCallback mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
@Override
public void onLeScan(final BluetoothDevice device, int rssi, byte[] scanRecord) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mLeDeviceListAdapter.addDevice(device);
mLeDeviceListAdapter.notifyDataSetChanged();
}
});
}
};

第三步 连接(在实际项目中开发,蓝牙各种操作都是放在service中由于篇幅有限就简写了)
BluetoothGatt mBluetoothGatt = device.connectGatt(this, false, mGattCallback);
连接状态通过接口回调
// GATT返回值,例如连接状态和service的改变 etc
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
//连接状态改变
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {

        if (newState == BluetoothProfile.STATE_CONNECTED) {
                //已连接

        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                //未连接
        }
    }

    //发现服务
    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {
        if (status == BluetoothGatt.GATT_SUCCESS) {
        //得到该智能设备所有service循环遍历可以得到所有charactertictis
           gatt.getServices();
    }

    //被读
    @Override
    public void onCharacteristicRead(BluetoothGatt gatt,
                                     BluetoothGattCharacteristic characteristic,
                                     int status) {
        if (status == BluetoothGatt.GATT_SUCCESS) {
            broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
           // number += 1;
        }
    }

    //特性改变
    @Override
    public void onCharacteristicChanged(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic characteristic) {
        broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
 
    }

    //特性书写
    @Override
    public void onCharacteristicWrite (BluetoothGatt gatt,
                                       BluetoothGattCharacteristic characteristic,
                                       int status){
    
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容