16d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang/* 26d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Copyright (C) 2014 The Android Open Source Project 36d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * 46d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Licensed under the Apache License, Version 2.0 (the "License"); 56d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * you may not use this file except in compliance with the License. 66d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * You may obtain a copy of the License at 76d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * 86d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * http://www.apache.org/licenses/LICENSE-2.0 96d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * 106d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Unless required by applicable law or agreed to in writing, software 116d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * distributed under the License is distributed on an "AS IS" BASIS, 126d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * See the License for the specific language governing permissions and 146d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * limitations under the License. 156d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 166d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 176d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangpackage android.bluetooth.le; 186d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 19af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wangimport android.annotation.SystemApi; 206d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangimport android.os.Parcel; 216d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangimport android.os.Parcelable; 226d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 236d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang/** 24ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * Bluetooth LE scan settings are passed to {@link BluetoothLeScanner#startScan} to define the 25ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * parameters for the scan. 266d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 276d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangpublic final class ScanSettings implements Parcelable { 286d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 29ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * Perform Bluetooth LE scan in low power mode. This is the default scan mode as it consumes the 30ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * least power. 316d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 326d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public static final int SCAN_MODE_LOW_POWER = 0; 33af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang 346d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 35ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * Perform Bluetooth LE scan in balanced power mode. Scan results are returned at a rate that 36ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * provides a good trade-off between scan frequency and power consumption. 376d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 386d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public static final int SCAN_MODE_BALANCED = 1; 39af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang 406d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 41ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * Scan using highest duty cycle. It's recommended to only use this mode when the application is 42ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * running in the foreground. 436d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 446d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public static final int SCAN_MODE_LOW_LATENCY = 2; 456d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 466d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 47ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * Trigger a callback for every Bluetooth advertisement found that matches the filter criteria. 48ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * If no filter is active, all advertisement packets are reported. 496d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 50af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang public static final int CALLBACK_TYPE_ALL_MATCHES = 1; 51af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang 526d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 53ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * A result callback is only triggered for the first advertisement packet received that matches 54ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * the filter criteria. 559960b576533041d07b141008c5925dcecb8c9224Wei Wang * 569960b576533041d07b141008c5925dcecb8c9224Wei Wang * @hide 576d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 589960b576533041d07b141008c5925dcecb8c9224Wei Wang @SystemApi 59af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang public static final int CALLBACK_TYPE_FIRST_MATCH = 2; 60af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang 616d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 62af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang * Receive a callback when advertisements are no longer received from a device that has been 63af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang * previously reported by a first match callback. 649960b576533041d07b141008c5925dcecb8c9224Wei Wang * 659960b576533041d07b141008c5925dcecb8c9224Wei Wang * @hide 666d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 679960b576533041d07b141008c5925dcecb8c9224Wei Wang @SystemApi 68af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang public static final int CALLBACK_TYPE_MATCH_LOST = 4; 696d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 706d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 71ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * Request full scan results which contain the device, rssi, advertising data, scan response as 72ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * well as the scan timestamp. 739960b576533041d07b141008c5925dcecb8c9224Wei Wang * 749960b576533041d07b141008c5925dcecb8c9224Wei Wang * @hide 756d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 769960b576533041d07b141008c5925dcecb8c9224Wei Wang @SystemApi 776d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public static final int SCAN_RESULT_TYPE_FULL = 0; 78af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang 796d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 80af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang * Request abbreviated scan results which contain the device, rssi and scan timestamp. 81ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * <p> 82ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * <b>Note:</b> It is possible for an application to get more scan results than it asked for, if 83ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * there are multiple apps using this type. 84ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * 856d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * @hide 866d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 87af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang @SystemApi 88af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang public static final int SCAN_RESULT_TYPE_ABBREVIATED = 1; 896d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 906d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang // Bluetooth LE scan mode. 916d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang private int mScanMode; 926d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 936d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang // Bluetooth LE scan callback type 946d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang private int mCallbackType; 956d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 966d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang // Bluetooth LE scan result type 976d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang private int mScanResultType; 986d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 996d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang // Time of delay for reporting the scan result 100685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang private long mReportDelayMillis; 1016d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1026d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public int getScanMode() { 1036d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return mScanMode; 1046d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1056d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1066d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public int getCallbackType() { 1076d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return mCallbackType; 1086d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1096d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1106d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public int getScanResultType() { 1116d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return mScanResultType; 1126d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1136d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1146d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 1156d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Returns report delay timestamp based on the device clock. 1166d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 117685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang public long getReportDelayMillis() { 118685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang return mReportDelayMillis; 1196d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1206d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1216d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang private ScanSettings(int scanMode, int callbackType, int scanResultType, 122ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang long reportDelayMillis) { 1236d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang mScanMode = scanMode; 1246d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang mCallbackType = callbackType; 1256d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang mScanResultType = scanResultType; 126ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang mReportDelayMillis = reportDelayMillis; 1276d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1286d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1296d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang private ScanSettings(Parcel in) { 1306d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang mScanMode = in.readInt(); 1316d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang mCallbackType = in.readInt(); 1326d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang mScanResultType = in.readInt(); 133685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang mReportDelayMillis = in.readLong(); 1346d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1356d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1366d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang @Override 1376d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public void writeToParcel(Parcel dest, int flags) { 1386d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang dest.writeInt(mScanMode); 1396d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang dest.writeInt(mCallbackType); 1406d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang dest.writeInt(mScanResultType); 141685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang dest.writeLong(mReportDelayMillis); 1426d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1436d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1446d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang @Override 1456d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public int describeContents() { 1466d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return 0; 1476d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1486d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1496d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public static final Parcelable.Creator<ScanSettings> 1506d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang CREATOR = new Creator<ScanSettings>() { 1516d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang @Override 1526d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public ScanSettings[] newArray(int size) { 1536d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return new ScanSettings[size]; 1546d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1556d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1566d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang @Override 1576d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public ScanSettings createFromParcel(Parcel in) { 1586d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return new ScanSettings(in); 1596d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1606d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang }; 1616d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1626d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 1636d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Builder for {@link ScanSettings}. 1646d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 1656d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public static final class Builder { 1666d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang private int mScanMode = SCAN_MODE_LOW_POWER; 167af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang private int mCallbackType = CALLBACK_TYPE_ALL_MATCHES; 1686d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang private int mScanResultType = SCAN_RESULT_TYPE_FULL; 169685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang private long mReportDelayMillis = 0; 1706d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1716d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 1726d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Set scan mode for Bluetooth LE scan. 1736d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * 174af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang * @param scanMode The scan mode can be one of {@link ScanSettings#SCAN_MODE_LOW_POWER}, 1756d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * {@link ScanSettings#SCAN_MODE_BALANCED} or 1766d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * {@link ScanSettings#SCAN_MODE_LOW_LATENCY}. 1776d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * @throws IllegalArgumentException If the {@code scanMode} is invalid. 1786d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 1796d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public Builder setScanMode(int scanMode) { 1806d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang if (scanMode < SCAN_MODE_LOW_POWER || scanMode > SCAN_MODE_LOW_LATENCY) { 1816d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang throw new IllegalArgumentException("invalid scan mode " + scanMode); 1826d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1836d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang mScanMode = scanMode; 1846d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return this; 1856d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 1866d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 1876d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 1886d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Set callback type for Bluetooth LE scan. 1896d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * 190af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang * @param callbackType The callback type flags for the scan. 1916d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * @throws IllegalArgumentException If the {@code callbackType} is invalid. 1929960b576533041d07b141008c5925dcecb8c9224Wei Wang * @hide 1936d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 1949960b576533041d07b141008c5925dcecb8c9224Wei Wang @SystemApi 1956d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public Builder setCallbackType(int callbackType) { 196ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang 197ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang if (!isValidCallbackType(callbackType)) { 1986d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang throw new IllegalArgumentException("invalid callback type - " + callbackType); 1996d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 2006d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang mCallbackType = callbackType; 2016d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return this; 2026d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 2036d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 204ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang // Returns true if the callbackType is valid. 205ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang private boolean isValidCallbackType(int callbackType) { 206ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang if (callbackType == CALLBACK_TYPE_ALL_MATCHES || 207ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang callbackType == CALLBACK_TYPE_FIRST_MATCH || 208ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang callbackType == CALLBACK_TYPE_MATCH_LOST) { 209ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang return true; 210ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang } 211ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang return callbackType == (CALLBACK_TYPE_FIRST_MATCH | CALLBACK_TYPE_MATCH_LOST); 212ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang } 213ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang 2146d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 2156d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Set scan result type for Bluetooth LE scan. 2166d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * 2176d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * @param scanResultType Type for scan result, could be either 2186d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * {@link ScanSettings#SCAN_RESULT_TYPE_FULL} or 219af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang * {@link ScanSettings#SCAN_RESULT_TYPE_ABBREVIATED}. 2206d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * @throws IllegalArgumentException If the {@code scanResultType} is invalid. 2216d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * @hide 2226d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 223af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang @SystemApi 2246d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public Builder setScanResultType(int scanResultType) { 2256d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang if (scanResultType < SCAN_RESULT_TYPE_FULL 226af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang || scanResultType > SCAN_RESULT_TYPE_ABBREVIATED) { 2276d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang throw new IllegalArgumentException( 2286d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang "invalid scanResultType - " + scanResultType); 2296d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 2306d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang mScanResultType = scanResultType; 2316d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return this; 2326d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 2336d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 2346d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 2356d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Set report delay timestamp for Bluetooth LE scan. 236685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang * 2379960b576533041d07b141008c5925dcecb8c9224Wei Wang * @param reportDelayMillis Delay of report in milliseconds. Set to 0 to be notified of 2389960b576533041d07b141008c5925dcecb8c9224Wei Wang * results immediately. Values > 0 causes the scan results to be queued up and 2399960b576533041d07b141008c5925dcecb8c9224Wei Wang * delivered after the requested delay or when the internal buffers fill up. 240ec64dbfbc0c7ecf41e17f3872c2d0109096f1c7aWei Wang * @throws IllegalArgumentException If {@code reportDelayMillis} < 0. 2416d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 2429960b576533041d07b141008c5925dcecb8c9224Wei Wang public Builder setReportDelay(long reportDelayMillis) { 243685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang if (reportDelayMillis < 0) { 2449960b576533041d07b141008c5925dcecb8c9224Wei Wang throw new IllegalArgumentException("reportDelay must be > 0"); 245685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang } 246685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang mReportDelayMillis = reportDelayMillis; 2476d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return this; 2486d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 2496d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang 2506d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang /** 2516d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Build {@link ScanSettings}. 2526d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */ 2536d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang public ScanSettings build() { 2546d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang return new ScanSettings(mScanMode, mCallbackType, mScanResultType, 255685c1758902a42a7beb030d8bbaed3f7ce6f6135Wei Wang mReportDelayMillis); 2566d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 2576d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang } 2586d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang} 259