首先,需要在 AndroidManifest.xml 文件中添加蓝牙权限:
然后,在需要进行蓝牙扫描的 Activity 中实现 BluetoothAdapter.LeScanCallback 接口,重写 onLeScan 方法,如下:
public class MainActivity extends AppCompatActivity implements BluetoothAdapter.LeScanCallback {
private BluetoothAdapter mBluetoothAdapter;
private boolean mScanning;
private Handler mHandler;
private static final long SCAN_PERIOD = 10000; // 扫描时间为 10s
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mHandler = new Handler();
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
scanLeDevice(true);
}
@Override
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
// 扫描到设备后的操作
}
private void scanLeDevice(final boolean enable) {
if (enable) {
// 扫描周期性广告
mBluetoothAdapter.startLeScan(this);
// 10s 后停止扫描
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mScanning = false;
mBluetoothAdapter.stopLeScan(MainActivity.this);
}
}, SCAN_PERIOD);
mScanning = true;
} else {
mScanning = false;
mBluetoothAdapter.stopLeScan(this);
}
}
}
在 scanLeDevice 方法中,调用 BluetoothAdapter 的 startLeScan 方法开始扫描,并利用 Handler 实现扫描一定时间后停止的功能。扫描结果会回调 onLeScan 方法,通过该方法获取广告数据以及设备信息。最后,停止扫描时调用 stopLeScan 方法即可结束扫描。