1.权限
使用蓝牙设备需要先在Manifest中开放权限,位置如下。
<manifest ...> <application ...> ... </application> // 使用蓝牙设备的权限 <uses-permission Android:name="android.permission.BLUETOOTH" /> // 管理蓝牙设备的权限 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> </manifest>
2.打开蓝牙获得蓝牙适配器(android.bluetooth.BluetoothAdapter),检查该设备是否支持蓝牙,如果支持,就打开蓝牙。
// 检查设备是否支持蓝牙 adapter = BluetoothAdapter.getDefaultAdapter(); if (adapter == null) { // 设备不支持蓝牙 } // 打开蓝牙 if (!adapter.isEnabled()) { Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); // 设置蓝牙可见性,最多300秒 intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); context.startActivity(intent); }
3.获取已配对的蓝牙设备(android.bluetooth.BluetoothDevice)首次连接某蓝牙设备需要先配对,一旦配对成功,该设备的信息会被保存,以后连接时无需再配对,所以已配对的设备不一定是能连接的。
BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); Set<BluetoothDevice> devices = adapter.getBondedDevices(); for(int i=0; i<devices.size(); i++) { BluetoothDevice device = (BluetoothDevice) devices.iterator().next(); System.out.println(device.getName()); }
4.搜索周围的蓝牙设备适配器搜索蓝牙设备后将结果以广播形式传出去,所以需要自定义一个继承广播的类,在onReceive方法中获得并处理蓝牙设备的搜索结果。
// 设置广播信息过滤 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(BluetoothDevice.ACTION_FOUND); intentFilter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED); intentFilter.addAction(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED); intentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED); // 注册广播接收器,接收并处理搜索结果 context.registerReceiver(receiver, intentFilter); // 寻找蓝牙设备,android会将查找到的设备以广播形式发出去 adapter.startDiscovery();
自定义广播类