蓝牙BLE设备是目前比较热门的设备。由于BLE有低功耗等特点,被广泛应用到身边的电子产品上。如智能手表、手环、防丢器等各种产品上。最近研究一下android上的ble应用开发。跟大家分享一下相关的内容。
我的实现使用两台Android手机做ble相关的通信,一台机器作为服务端接收发过来的消息,另一台作为客户端发送消息。
客户端基本流程如下:
1.添加蓝牙相关权限
2.BLE设备扫描使用BluetoothAdapter.startLeScan来扫描发现设备,这个方法需要参数BluetoothAdapter.LeScanCallback,所以还需要实现此回调方法,来获取扫描结果。
注意:BLE扫描耗电量比较大,尽可能缩短扫描时间。发现用户所需连接的设备后立即停止扫描
public classDeviceScanActivity extendsListActivity {
privateBluetoothAdapter mBluetoothAdapter;private booleanmScanning;privateHandler mHandler;// 10秒后停止寻找.private static final longSCAN_PERIOD= 10000;private voidscanLeDevice(final booleanenable) {
if(enable) {
//经过预定扫描期后停止扫描mHandler.postDelayed(newRunnable() {
@Overridepublic voidrun() {
mScanning= false;mBluetoothAdapter.stopLeScan(mLeScanCallback);}
},SCAN_PERIOD);mScanning= true;mBluetoothAdapter.startLeScan(mLeScanCallback);} else{
mScanning= false;mBluetoothAdapter.stopLeScan(mLeScanCallback);}
}
}
BLE扫描结果的接口,下面是BluetoothAdapter.LeScanCallback的实现。可以获取到扫描到设备的蓝牙名称和蓝牙地址等。
privateBluetoothAdapter.LeScanCallback mLeScanCallback=
newBluetoothAdapter.LeScanCallback() {
@Overridepublic voidonLeScan(finalBluetoothDevice device, intrssi, byte[] scanRecord) {
runOnUiThread(newRunnable() {
@Overridepublic voidrun() {
device.getName();//获得扫描到设备名称device.getAddress();//获取设备蓝牙地址}
}