diff --git a/core/api/system-current.txt b/core/api/system-current.txt index a1e701ce06e6d..6727031f7a1c4 100755 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -1969,6 +1969,7 @@ package android.bluetooth { method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean canBondWithoutDialog(); method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean cancelBondProcess(); method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean createBondOutOfBand(int, @Nullable android.bluetooth.OobData, @Nullable android.bluetooth.OobData); + method @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public boolean fetchUuidsWithSdp(int); method @Nullable @RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.BLUETOOTH_PRIVILEGED}) public byte[] getMetadata(int); method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public int getSimAccessPermission(); method @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean isConnected(); diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index f68a8b28e9dfa..12211485cc07e 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -1791,13 +1791,41 @@ public final class BluetoothDevice implements Parcelable, Attributable { @RequiresBluetoothConnectPermission @RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT) public boolean fetchUuidsWithSdp() { + return fetchUuidsWithSdp(TRANSPORT_AUTO); + } + + /** + * Perform a service discovery on the remote device to get the UUIDs supported with the + * specific transport. + * + *

This API is asynchronous and {@link #ACTION_UUID} intent is sent, + * with the UUIDs supported by the remote end. If there is an error + * in getting the SDP or GATT records or if the process takes a long time, or the device + * is bonding and we have its UUIDs cached, {@link #ACTION_UUID} intent is sent with the + * UUIDs that is currently present in the cache. Clients should use the {@link #getUuids} + * to get UUIDs if service discovery is not to be performed. If there is an ongoing bonding + * process, service discovery or device inquiry, the request will be queued. + * + * @param transport - provide type of transport (e.g. LE or Classic). + * @return False if the check fails, True if the process of initiating an ACL connection + * to the remote device was started or cached UUIDs will be broadcast with the specific + * transport. + * + * @hide + */ + @SystemApi + @RequiresPermission(allOf = { + android.Manifest.permission.BLUETOOTH_CONNECT, + android.Manifest.permission.BLUETOOTH_PRIVILEGED, + }) + public boolean fetchUuidsWithSdp(@Transport int transport) { final IBluetooth service = sService; if (service == null || !isBluetoothEnabled()) { Log.e(TAG, "BT not enabled. Cannot fetchUuidsWithSdp"); return false; } try { - return service.fetchRemoteUuidsWithAttribution(this, mAttributionSource); + return service.fetchRemoteUuidsWithAttribution(this, transport, mAttributionSource); } catch (RemoteException e) { Log.e(TAG, "", e); }