4.0蓝牙 ble开发记录

刚拿到蓝牙的需求,是比较纠结的,因为比较急。所以给的时间不是很多。下面总结一下开发的步骤和遇到的一些问题及解决方法。

1.获得bluetoothAdapter

BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
bluetoothAdapter = bluetoothManager.getAdapter();


2.开启蓝牙

bluetoothAdapter.isEnabled() 这段代码用来判断蓝牙是否开启。如果没有开启,调用下面的代码

Intent enableBtIntent = new Intent( BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, RESULT_OK);  


3.扫描设备

public void scanLeDevice(boolean enable) {
        if (enable) {
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    bluetoothAdapter.stopLeScan(mLeScanCallback);
                }
            }, SCAN_PERIOD);
            bluetoothAdapter.startLeScan(new UUID[] { SampleGattAttributes.SERVICE_UUID },mLeScanCallback);
        } else {
            bluetoothAdapter.stopLeScan(mLeScanCallback);
        }
    }



我这里需要获取给定UUID的设备,所以用了   bluetoothAdapter.startLeScan(new UUID[] { SampleGattAttributes.SERVICE_UUID },mLeScanCallback); 这个方法。 如果想要扫描周边的所有的蓝牙设备,可以调用bluetoothAdapter.startLeScan(mLeScanCallback); 这个方法。

在BluetoothAdapter.LeScanCallback 接口回调中,

    private BluetoothAdapter.LeScanCallback mLeScanCallback = new LeScanCallback() {

        @Override
        public void onLeScan(final BluetoothDevice arg0, int arg1, byte[] arg2) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    myadapter.addDevice(arg0);
                    myadapter.notifyDataSetChanged();
               //     address = arg0.getAddress();
             //       if (mBluetoothLeService != null) {
                //        mBluetoothLeService.connect(address);
                    }
                }
            });
        }

    };

扫面到了设备就把该设备添加到list中,然后刷新适配器。


4.连接设备

这些做完之后,就需要连接你所要的蓝牙设备。

以下代码写在service中。

public boolean connect(String address) {
        BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
        if (device != null) {
            mBluetoothGatt = device.connectGatt(this, false, mGattcallback);
        }
        return true;
    }

在activity中调用service中的方法即可。至于怎么获取service的对象,就需要你自己写一个Binder去继承Binder,然后在里面写一个方法,返回Service对象。

    class MyBinder extends Binder {
        public BluetoothLeService getService() {
            return BluetoothLeService.this;
        }
    }

然后,在onBinder方法里,然后你写的这个MyBinder对象即可。

然后就是比较重要的一个抽象类BluetoothGattCallback,在它里面有很多方法,这些方法用于回调。

方法onConnectionStateChange     在连接状态发生改变的时候会回调这个方法。

方法onCharacteristicRead       在调用mBluetoothGatt.readCharacteristic(mBluetoothGattCharacteristic)的时候会被调用。

方法onCharacteristicWrite   在调用mBluetoothGatt.writeCharacteristic(mBluetoothGattCharacteristic);的时候会被调用。

方法onCharacteristicChanged   在调用mBluetoothGatt.setCharacteristicNotification(gattCharacteristic, enable);之后,每调用mBluetoothGatt.writeCharacteristic(mBluetoothGattCharacteristic); 服务端就会返回一次设备数据给你,返回的数据就在onCharacteristicChanged  方法里面。

如果要获取数据,需要在onCharacteristicChanged  方法里面发送一个广播,然后在activity中接收广播,解析数据即可。


以上就是简单的开发步骤,高深的我也正在学习,与君共勉!~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值