关于Android蓝牙的设计记录。

模块设计情况

蓝牙用途的主要分为:蓝牙扫描,蓝牙连接,系统蓝牙监听三种情况结合起来。
蓝牙的扫描建议可以用线程的方式,防止阻塞。也可以定时的停止扫描。
当然扫描有两种方式,
第一种是:

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绑定广播/服务解耦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值