BluetoothManager的getConnectedDevices方法用于获取已连接的蓝牙设备列表,代码如下:
//packages/modules/Bluetooth/framework/java/android/bluetooth/BluetoothManager.java
public final class BluetoothManager {
public List<BluetoothDevice> getConnectedDevices(int profile) {
if (DBG) Log.d(TAG, "getConnectedDevices");
return getDevicesMatchingConnectionStates(profile, new int[] {
BluetoothProfile.STATE_CONNECTED
});
}
}
调用getDevicesMatchingConnectionStates并返回结果:
//packages/modules/Bluetooth/framework/java/android/bluetooth/BluetoothManager.java
public final class BluetoothManager {
public List<BluetoothDevice> getDevicesMatchingConnectionStates(int profile, int[] states) {
if (DBG) Log.d(TAG, "getDevicesMatchingConnectionStates");
if (profile != BluetoothProfile.GATT && profile != BluetoothProfile.GATT_SERVER) {
throw new IllegalArgumentException("Profile not supported: " + profile);
}
List<BluetoothDevice> devices = new ArrayList<BluetoothDevice>();
try {
IBluetoothManager managerService = mAdapter.getBluetoothManager(); //获取IBluetoothManager 对象
IBluetoothGatt iGatt = managerService.getBluetoothGatt(); //获取IBluetoothGatt 短袖
if (iGatt == null) return devices;
final SynchronousResultReceiver<List<BluetoothDevice>> recv =
SynchronousResultReceiver.get();
iGatt.getDevicesMatchingConnectionStates(states, mAttributionSource, recv);
devices = Attributable.setAttributionSource(
recv.awaitResultNoInterrupt(getSyncTimeout()).getValue(devices),
mAttributionSource); //设置应用程序的 AttributionSource 对象的方法。AttributionSource 对象包含了应用程序的 pid/uid 信息,用于在应用程序请求某个需要权限的功能时进行权限检查。
} catch (RemoteException | TimeoutException e) {
Log.e(TAG, "", e);
}
return devices;
}
}