模块设计情况
蓝牙用途的主要分为:蓝牙扫描,蓝牙连接,系统蓝牙监听三种情况结合起来。
蓝牙的扫描建议可以用线程的方式,防止阻塞。也可以定时的停止扫描。
当然扫描有两种方式,
第一种是:
BluetoothLeScanner scanner;
scanner=mBtAdapter.getBluetoothLeScanner();
scanner.startScan(leScanCallback_one);//开启扫描
private ScanCallback leScanCallback_one=new ScanCallback() {
//第一种方式
@Override
public void onScanResult(int callbackType, ScanResult result) {
}}
第二种是:
当然了,现在Android更加推荐使用的是第一种。
BluetoothAdapter mBtAdapter;
BluetoothManager mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
mBtAdapter= mBluetoothManager .getAdapter();
boolean isScanning = mBtAdapter.startLeScan(mLeScanCallback);
private class LeScanCallback implements BluetoothAdapter.LeScanCallback {
@Override
public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) {
//还是要去判断这个设备到底合适不合适,我再加入到我的设备列表中
if (mBtAdapter != null && device != null
&& device.getName() != null && device.getName().length() > 0 && device.getType() !=0) {
}
}
}
蓝牙连接,如果不想因为内存不足而活动被回收,需要Actiivty一直存活。则建议将蓝牙连接和GATT服务这块都放到Service内,服务内还可以去监听状态改变。
Intent gattServiceIntent = new Intent(this, serviceClass);
gattServiceIntent.putExtra(Consts.BLUETOOTH_ADDRESS_KEY, address); // give address to the service
bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);//绑定服务后,自动创建服务
而关于系统蓝牙的卡其和权限的问题,则用继承的方式进行解耦和把功能实现。
具体情况可看我的第一篇文章
关于Android父类继承Activity绑定广播/服务解耦