赞
踩
最近在做android bluetooth方面的项目,在网上找了很多所谓的demo和官方的demo。发现或多或少的都有些问题,今天是第一次写技术方面的文章,我就从这篇开始吧!
关于android bluetooth 无非就是三点:
一. 扫描蓝牙 二. 连接蓝牙设备 三. 通信。
下面让我们就同第一点开始:
android蓝牙的扫描有三种函数:
1.public boolean startDiscovery();
2.public boolean startLeScan(LeScanCallback callback)和 public boolean startLeScan(final UUID[] serviceUuids, final LeScanCallback callback)。
这两张函数都是在BluethoothAdapter这个类中。下面我们就来解释下这两个函数:
public boolean startDiscovery()这个函数只能扫描传统意义的蓝牙设备 时间扫描12s自动关闭,这是异步操作扫描蓝牙设备。首先你要注册一个接收者。
filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
this.registerReceiver(mReceiver, filter);
filter = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
this.registerReceiver(mReceiver, filter);
//广播接收者
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action))
}
}
}
};
当然还有其他的广播事件你也可以注册。请自己查看SDK。
public boolean startLeScan(LeScanCallback callback)和 public boolean startLeScan(final UUID[] serviceUuids, final LeScanCallback callback)这两个函数是扫描低功耗蓝牙设备的,好像没有扫描时间限制,只能调用public void stopLeScan(LeScanCallback callback)来关闭。这个两个不同的地方就是可以过滤你想要扫描的UUID,他们都是通过的LeScanCallback回调接口来返回扫描的结果。
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() {
LogUtil.d(TAG, device.getAddress()+" LeScanCallback:::"+device.getName());
if (!mArrayList.contains(device)) {
mArrayList.add(device);
mDeviceAdapter.notifyDataSetChanged();
}
}
});
}
};
但是这种扫描低功耗蓝牙的方法在api21就被标记废弃使用。下面介绍第三扫描蓝牙设备的函数:
3.public void startScan(final ScanCallback callback)和public void startScan(List filters, ScanSettin
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。